我有UserController
和PetController
。
在我的UserController
中,我有rewardUser()
方法。
在我的PetController
中,我使用$user
变量来指示当前登录的用户。
如何从PetController运行我的rewardUser()
方法?
我一直试图使用$user->rewardUser();
,但由于某些原因,它不会以这种方式识别我的方法。
"Call to undefined method Illuminate\Database\Query\Builder::rewardUser()"
答案 0 :(得分: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()
直接调用该方法。
非常简单有效。
答案 1 :(得分:0)
您似乎缺少一些结构概念,但如果您真的需要它,您可以使用容器来执行此操作:
$userController = app()->make(UserController::class);
return app()->call([$userController, 'rewardUser']);
答案 2 :(得分:-1)
可能是您应该在用户模型中定义方法rewardUser()
并将其导入use App\User