Laravel - 在一个控制器中运行另一个控制器的方法

时间:2016-04-24 14:39:31

标签: laravel

我有UserControllerPetController

在我的UserController中,我有rewardUser()方法。

在我的PetController中,我使用$user变量来指示当前登录的用户。

如何从PetController运行我的rewardUser()方法?

我一直试图使用$user->rewardUser();,但由于某些原因,它不会以这种方式识别我的方法。

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

3 个答案:

答案 0 :(得分:1)

最好的方法是使用特征。

App\Common.php中创建一个特征文件,例如然后将rewardUser()方法复制到特征。

你的特质文件:

namespace App\Forum;


trait Common {

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

}

然后在UserController.phpPetController.phpuse这个特性。

// 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()直接调用该方法。

非常简单有效。

答案 1 :(得分:0)

您似乎缺少一些结构概念,但如果您真的需要它,您可以使用容器来执行此操作:

$userController = app()->make(UserController::class);
return app()->call([$userController, 'rewardUser']);

答案 2 :(得分:-1)

可能是您应该在用户模型中定义方法rewardUser()并将其导入use App\User