2016-06-01 3 views
0

が行方不明投げ、それはコントローラのメソッド宣言で入力-ヒントRequestオブジェクトにsuggestedです:Requestオブジェクトの型を示唆したライブラリー法にはLaravel 5.2では、引数エラー

私は1つで同じことをやろうとしています私のライブラリの:私は以下のコードに示すように、ライブラリのメソッドを使用しようとすると

<?php 

namespace App\Libraries; 

use Illuminate\Http\Request; 

class MyLibrary { 

    public static function doStuff(Request $request) { 
     //... 
    } 
} 

はしかし、私は不足している引数のエラーを取得:

<?php 

namespace App\Http\Controllers; 

use App\Libraries\MyLibrary; 

class DefaultController extends Controller { 

    public function __construct() { 
     MyLibrary::doStuff(); // => trows missing argument error 
    } 

} 

今、私はdoStuff()メソッドにRequestオブジェクトをヒントしました。なぜ私は引数を渡す必要がありますか?私は、タイプヒントはメソッドに必要なリソースを注入する方法だと思ったので、必ずしも直接渡す必要はありません。私はその概念を間違って理解していますか?

答えて

2

1つの引数を取るメソッドdoStuff()を宣言し、引数は要求クラスのインスタンスでなければなりません。

タイプヒントは、引数がどのタイプである必要があるかを示します。あなたがdoStuffを呼び出す場合など

function sum(int $x, int $y) { 
    return $x+$y; 
} 

sum(1,2); // ok 
sum('1', 2); // error 

ため

はあなたが要求を自分で渡す必要があります。 doStuffメソッドは、引数なしで呼び出され、したがって、エラーを - あなたがしてちょうどMyLibrary::doStuff()でメソッドを実行した場合、正確に何が起こるかであるためにあなたが求めるものをhttp://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration

+0

Laravelでは、タイプヒントやコントローラーについては内部的な魔法が起こっていると私は理解しています。 'public function update(Request $ request、$ id)'のように、 'update'メソッドは' id'を渡す必要がありますが、 'Request'パラメータは内部的に扱われます。 – lesssugar

+0

はい、Laravelはかなり魔法に見えるかもしれませんが、結局PHPです。 – Amarnasan

1

<?php 

namespace App\Http\Controllers; 

use App\Libraries\MyLibrary; 

class DefaultController extends Controller { 

    public function __construct() { 
     $request = get regest object from laravel; 
     MyLibrary::doStuff($request); 
    } 

} 

は、PHPのドキュメントで型宣言についての詳細を読みます。

サービスにメソッドを注入する場合は、サービスコンテナを使用してメソッドを呼び出す必要があります。次のコードは、トリックを行う必要があります。

\App::call(['App\Libraries\MyLibrary', 'doStuff']); 

サービスコンテナはタイプヒントを見て、それはそれを持っている場合には、値を挿入します。

+0

おかげで、ありがとう。 – lesssugar

関連する問題