2016-04-24 5 views
0

У меня есть UserController и PetController.Laravel - метод работы другого контроллера в одном контроллере

В моем UserController у меня есть rewardUser() метод.

в моем PetController, я использую переменную $user, которая указывает текущего пользователя.

Как я могу запустить мой метод rewardUser() у моего PetController?

Я пытался использовать пользователя $user->rewardUser();, но по некоторым причинам его не распознал мой метод таким образом.

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

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

ответ

-1

может быть, вы должны определить метод rewardUser() в модели пользователя и импортировать его с use App\User

+0

Да, вы правы. Определение метода, подобного предполагаемому в модели, а не в контроллере. Благодаря! – TheUnreal

1

Лучший способ заключается в использовании черту.

Создайте файл признака, в App\Common.php, например. Затем скопируйте метод rewardUser() в свойство.

Ваш признак файла:

namespace App\Forum; 


trait Common { 

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

} 

Затем в UserController.php и PetController.php, 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']); 
Смежные вопросы