[英]Laravel - Type error: Too few arguments?
我收到一個錯誤:
類型錯誤:參數太少
如果爭論沒有完全通過,我認為Laravel會做些什么?
例如:
在控制器中我有:
public function create(CreateRequest $request)
{
return $this->todoService->createList($request);
}
在todoService
類中:
use App\Plan
class todoService {
public function createList($request, Plan $plan)
{
//
}
}
如您所見,我沒有傳遞Plan
類對象。 我必須綁定什么?
如果您自己調用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] );
這里$container
是Illuminate\\Contracts\\Container\\Container
。
只有在依賴於接口時才必須bind
類。 如果指定特定的類,則反射將為您完成工作。 文件
這將起作用的唯一方法是設置第二個參數的默認值。 在任何其他情況下,將拋出語法異常。
use App\Plan
class todoService
{
public function createList($request, Plan $plan = null)
{
//
}
}
public function create(CreateRequest $request)
{
return $this->todoService->createList($request);
}
它會起作用,但這會有意義嗎?
Laravel在這個級別上不能做任何魔術,因為你的編碼錯誤只是一個PHP語法錯誤。 您指示第二個參數是Plan
類型,這使其成為必需的隱式。 Laravel不能像這樣“修補”簡單的函數調用。
您的困惑可能在於,根據您的路由,Laravel可以將正確的Plan
參數注入到create
controller方法中,從而允許您將其轉發到服務中。
/**
* Create a new personal access token for the user.
*
* @param string $name
* @param array $scopes
* @return \Laravel\Passport\PersonalAccessTokenResult
*/
public function createToken($name, array $scopes = [])
{
return Container::getInstance()->make(PersonalAccessTokenFactory::class)->make(
$this->getKey(), $name, $scopes
);
}
/**
* Set the current access token for the user.
*
* @param \Laravel\Passport\Token $accessToken
* @return $this
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.