2016-04-24 14 views
0

UserControllerPetControllerがあります。Laravel - 1つのコントローラで別のコントローラを実行する方法

私のUserControllerには、rewardUser()という方法があります。

私のPetControllerには、現在ログインしているユーザーを示す変数$userが使用されています。

私のPetControllerからrewardUser()メソッドをどのように実行できますか?

私はユーザー$user->rewardUser();に行ってきましたが、何らかの理由で自分の方法をこのように認識していません。

"Call to undefined method Illuminate\Database\Query\Builder::rewardUser()" 
+0

http://stackoverflow.com/questions/30365169/access- controller-method-from-another-controller-in-laravel-5 – rishal

答えて

-1

あなたが最良の方法は、形質を使用することですユーザーモデルにメソッドrewardUser()を定義し、use App\User

+0

そうですね。モデラーではなくコントローラではないと思われる方法を定義する。ありがとう! – TheUnreal

1

でそれをインポートする必要があるかもしれません。

App\Common.phpの形質ファイルを作成します。次に、形質にrewardUser()メソッドをコピーします。

あなたの形質ファイル:あなたのUserController.phpPetController.phpで次に

namespace App\Forum; 


trait Common { 

    public function rewardUser() { 
     // Your code here... 
    } 

} 

use特性。

// UserController and PetController.php 

namespace App\Http\Controllers 

use App\Common; // <- Your trait 


class UserController extends Controller { 

use Common // <- Your trait 

    public function doSomething() { 

     // Call the method from both your controllers now. 
     $this-rewardUser(); 
    } 
} 

あなたが好きなあなたはできるだけ多くのコントローラでストレートを使用することができますし、$this->methodName()を使用してストレートでメソッドを呼び出すことができます。

非常に簡単で効果的です。

0

あなたには、いくつかの構造の概念が欠落しているように思えますが、あなたが本当にそれを必要とする場合、あなたがそうするように、コンテナを使用することができます:

$userController = app()->make(UserController::class); 
return app()->call([$userController, 'rewardUser']); 
関連する問題