【问题标题】:Laravel 5.2 Controller returning an objectLaravel 5.2控制器返回一个对象
【发布时间】: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;

作为一个新手,我做错了什么,但是什么?

【问题讨论】:

    标签: php laravel-5 controller


    【解决方案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()
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-04
          • 1970-01-01
          相关资源
          最近更新 更多