Laravel 5.2控制器返回一个对象
Posted
技术标签:
【中文标题】Laravel 5.2控制器返回一个对象【英文标题】:Laravel 5.2 Controller returning an object 【发布时间】:2016-10-26 21:56:43 【问题描述】:我在控制器只返回一个对象时遇到问题。我有一个表类型,在 TypesController 中我想要一个只返回类型数组的函数,所以我可以在另一个控制器中使用它,所以我在 TypesController 中编写:
public function getNavTypes()
$types = DB::table('v_itemtypes')->get();
return ($types);
我想在另一个控制器(作者)中调用它,所以我添加了这一行
use App\Http\Controllers\TypeController;
并且只想在我的方法中调用对象以传递给视图:
public function getAuthor($author_id)
$author = Author::where('id', $author_id)->first();
$navtypes = TypeController::getNavTypes;
return view('authors.edit',['author'=>$author, 'navtypes'=>$navtypes]);
但我收到以下错误:
FatalErrorException in AuthorController.php line 28: Undefined class constant 'getNavTypes'
第 28 行是
$navtypes = TypeController::getNavTypes;
作为一个新手,我做错了什么,但是什么?
【问题讨论】:
【参考方案1】:除非函数是static
,否则您不能在不实例化其类的情况下调用函数。所以要么你把你的函数改成static
:
public static function getNavTypes()
或者你先实例化一个控制器的对象:
$typeController = new TypeController();
$navtypes = $typeController->getNavTypes();
顺便说一句,getNavTypes
是一个函数,你需要添加两个括号:
()
在调用它时在它的名字之前。所以把$navtypes = TypeController::getNavTypes;
改成$navtypes = TypeController::getNavTypes();
希望这会有所帮助。
【讨论】:
谢谢!现在排序!【参考方案2】:我认为你应该使用 TypeController::getNavTypes(),因为 getNavTypes 是一种方法,而不是类常量。
【讨论】:
【参考方案3】:仅当您将方法指定为static
时,才可以使用::
调用方法。
public static function myMethod()
// Do stuff...
在您的情况下,方法 不是 静态的,因此您需要像这样调用您的方法:
$TypeController = new TypeController();
$navtypes = $TypeController->getNavTypes();
在 Laravel 中,您还可以像这样创建控制器实例:
$TypeController = App::make('TypeController');
$navtypes = $TypeController->getNavTypes();
注意:
您的 getNavTypes()
方法在逻辑上属于 Model 或 Repository 类。因此,您最好将其移出控制器并将其放置在您选择的模型类中 - 可能最适合上下文的位置。在您的控制器中,应该放置大部分 action
方法。
【讨论】:
【参考方案4】:您可以在 Laravel 5 的不同控制器中调用控制器方法,例如:
app('App\Http\Controllers\TypeController')->getNavTypes()
参考:Access Controller method from another controller in Laravel 5
根据您的代码:getNavTypes
是一种方法,而不是静态属性或常量。你可以这样称呼它
TypeController::getNavTypes();
在调用它之前也要声明这个方法是静态的:
public static function getNavTypes()
【讨论】:
以上是关于Laravel 5.2控制器返回一个对象的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.2:测试上传的文件是不是有效:非对象上的 isValid()
处理来自 PHPUnit (Laravel 5.2) 的自定义异常
如何通过Laravel 5.2中的其他控制器扩展通用控制器?