Laravel - 类型错误:参数太少?

新手上路,请多包涵

我收到一个错误:

类型错误:参数太少

如果参数没有完全通过,我认为 Laravel 会做一些魔术?

例如:

在控制器中我有:

 public function create(CreateRequest $request)
{
    return $this->todoService->createList($request);
}

todoService 类中:

 use App\Plan

class todoService {

    public function createList($request, Plan $plan)
    {
      //
    }
}

如您所见,我没有通过 Plan 类对象。我必须绑定还是什么?

原文由 I‘ll-Be-Back 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 472
2 个回答

如果您自己调用 createList() ,那么您需要自己传递这两个参数。你可以用 Plan 绑定一些东西,但如果你调用的东西不是 Laravel,那么你将负责传递该函数参数。

这种类型提示只有在 Laravel 调用该函数时才有效。所以需要通过 Laravel 调用这些函数。

如果您尝试自动注入类的构造函数,您可以简单地执行以下操作:

 $service = $this->app->make('App\Plan\todoservice');

或者

$service = App::make('App\Plan\todoservice');

或者

$service = resolve('App\Plan\todoservice');

但这仅适用于构造函数。请注意,您还可以提供参数作为 make()resolve() 函数的下一个参数。

事实上,不同的方法也可以这样调用。

你可以简单地做:

     $service = App::make('App\Plan\todoservice');
    $container->call([$service, 'createList'], ['request' => $request] );

这里 $containerIlluminate\Contracts\Container\Container 的对象。

原文由 Hafiz 发布,翻译遵循 CC BY-SA 3.0 许可协议

Laravel 在这个级别上不能做任何魔法,因为你的编码错误只是一个 PHP 语法错误。您表示第二个参数的类型是 Plan ,这使得它隐含地强制执行。 Laravel 不能像这样“修补”简单的函数调用。

您的困惑可能在于,根据您的路由,Laravel 可以将正确的 Plan 参数注入 create 控制器方法,从而允许您将其转发到服务中。

原文由 Niels Keurentjes 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题