【问题标题】:Trying to get property of non-object Error in Laravel 5.2试图在 Laravel 5.2 中获取非对象错误的属性
【发布时间】:2016-08-25 04:18:48
【问题描述】:

我为这个问题寻找了很多解决方案,但我找不到任何有用的东西。 我有这些路线:

Route::group(['prefix'=>'post'], function(){
    Route::get('{id}', 'PostsController@show');
    Route::get('create', function(){
        return 'ok';
    });
});

当我尝试访问 http://localhost:8000/post/create/ 时,我收到此错误:

Trying to get property of non-object (View: C:\xampp\htdocs\myblog\resources\views\post.blade.php)

但是我的 post.blade.php 可以正确显示任何帖子,没有任何问题。 知道为什么会出现此错误吗?

注意:在 PostsController 中使用 show 方法的 get 路由正常工作,它使用 post.blade.php 没有任何问题。

【问题讨论】:

    标签: php laravel laravel-5.2


    【解决方案1】:

    laravel 将 '/create' 作为 {id} 参数,而这个 'create' 作为参数将作为 PostsController 中 show() 方法的参数。 发生这种情况是因为 '{id}' 路由首先出现,然后是路由文件中的 'create' 路由。

    有两种方法可以解决这个问题...

    1. 将“创建”路线移到“{id}”路线上方。

    2. 如果您以智能方式工作,您可以像这样指定参数 id(如果是数字)...

    通过在路由中为id参数指定模式匹配

    Route::get('{id}', 'PostsController@show')->where('id', '[0-9]+');
    

    【讨论】:

      【解决方案2】:

      它正在考虑将“create”作为 {id} 的参数。

      重组路线。它会起作用的。

      Route::group(['prefix'=>'post'], function(){
          Route::get('create', function(){
              return 'ok';
          });
          Route::get('{id}', 'PostsController@show');
      });
      

      【讨论】:

      • 我像这样重组它 Route::group(['prefix'=>'post'], function(){ Route::group(['middleware'=>'auth'], function (){ Route::get('create', 'PostsController@create'); }); Route::get('{id}', 'PostsController@show'); });但我得到了这个错误: Method App\Http\Controllers\PostsController::create() does not exist 尽管它存在
      • 您添加了中间件身份验证。语法是正确的。一旦检查中间件身份验证。
      【解决方案3】:

      将“create”路由移到“{id}”路由上方,在您的情况下,它不起作用,因为它在 PostsController 上调用“show”方法,因为“create”字符串被识别为“{id}”图案

      【讨论】:

      • 非常感谢它有效但我想了解为什么它一直将 ut 识别为 {id}?!
      猜你喜欢
      • 2016-12-23
      • 2018-01-15
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-13
      相关资源
      最近更新 更多