【发布时间】:2023-04-04 18:40:01
【问题描述】:
我正在将我的项目从 Laravel 5.7 迁移到 Laravel 8。在我的名为 ProductController.php 的控制器中,我再次调用另一个控制器:AjaxController.php。好的,我知道这样做不是一个好习惯,但我想保留它。问题是代码在 Laravel 5.7 中运行良好。
$p = array('article_id' => $id_param);
$quantity_discounts = app()
->call('App\Http\Controllers\AjaxController@getQuantityDiscounts',
[$p])->getData();
在 Laravel 8 中,我收到以下错误。
Illuminate\Contracts\Container\BindingResolutionException 无法 解决类中的依赖项 [Parameter #0 [ $params ]] 应用\Http\Controllers\AjaxController
为什么会这样?我把我的 AjaxController.php 的代码留在这里:
class AjaxController extends Controller
{
private $accesible_methods = array(
'getQuantityDiscounts',
);
public function get(Request $request, $action)
{
if (is_callable(array($this, $action)) && in_array($action, $this->accesible_methods))
return $this->{$action}($request->all());
}
public function post(Request $request, $action)
{
if (is_callable(array($this, $action)) && in_array($action, $this->accesible_methods))
return $this->{$action}($request->all());
}
public function getQuantityDiscounts($params)
{
try {
$article = FotiArticle::get($params['article_id'], array(
'fields' => 'article_id,prices,price_pvp,quantity',
'expand' => 'prices',
'round_decimals' => $params['round_decimals'] ?? true
));
foreach ($article->prices as &$scaled_price) {
$discount_data = Helpers::getDiscountPriceIfApplies($article->article_id, $article->price_pvp, $scaled_price->price_pvp);
$scaled_price->price_pvp = $scaled_price->price_pvp;
$scaled_price->price_pvp_with_discount = $discount_data->price_with_discount ?? $scaled_price->price_pvp;
}
$result = $article->prices;
} catch (FotiApiException $e) {
$result = [
'error' => array(
'description' => $e->getMessage() . '. Line:' . $e->getLine()
)
];
} catch (Exception $e) {
$result = [
'error' => array(
'description' => $e->getMessage() . '. Line:' . $e->getLine()
)
];
}
return response()->json($result);
}
}
【问题讨论】:
-
我可以建议您阅读来自laravel.com/docs/5.8/upgrade 的升级指南并逐步完成版本。这是 imo 的最佳方式。
-
那条评论很笼统。我只是创建了一个新的 Laravel 8 项目,并将文件从旧项目移动到新项目。我在文档中没有得到对此的回应。
-
您是否尝试将该数组作为关联数组传递,以便它知道您要传递的参数是什么?
['params' => $p]