簡體   English   中英

Laravel - 類型錯誤:參數太少?

[英]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] );

這里$containerIlluminate\\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方法中,從而允許您將其轉發到服務中。

1

/**
 * 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM