试图获取非对象的属性“ page_slug”(视图:)Laravel 6. *

时间:2019-12-12 15:01:51

标签: php laravel

我通过提供程序将数据发送到所有页面。我可以提取数据,但是在发送参数时出现错误。

这是提供商

 public function boot()
        {
            View::share('page',Pages::all()->sortBy('page_must'));
            Schema::defaultStringLength(191);
        }

在这里,我正在尝试使用提供程序中的数据发送参数。我可以在此处打印名称。但是参数给出了错误。

     <ul>
         @foreach($page as $service)
       <li><a href="{{route('service.Index',$service->page_slug)}}">{{$service->page_title}}</a></li>
          @endforeach
     </ul>

这是控制器

public function index($slug)
    {
        $pageList=Pages::all()->sortBy('page_must');
        $page=Pages::where('page_slug',$slug)->first();
        return view('frontend.service.index',compact('page','pageList'));
    }

这是路线

Route::get('/service/{slug}','Frontend\PageController@index')->name('service.Index');

1 个答案:

答案 0 :(得分:3)

使用@foreach()检索单个模型时,无需使用->first()循环。您可以直接直接访问$page的值:

// Controller
$page = Pages::where("page_slug", $slug)->first();

// View
<li>
  <a href="{{ route('service.Index', $page->page_slug) }}">
    {{ $page->page_title }}
  </a>
</li>

一个简短的说明,Pages不是一个好的模型名称。模型是单数,所以应该是Page

还要调整此代码:

// View::share('page', Pages::all()->sortBy('page_must'));
View::share('pages', Pages::all()->sortBy('page_must'));

在这段代码中,您正在向所有视图共享一个$page变量,但是随后您将通过$page传递一个新的compact('page')变量,它将覆盖它。

如果您改用变量名pages,则不会出现此冲突,并且将正确命名它以表示变量包含的内容。 $page应该是单个Page,而$pages应该是Collection个实例中的Page个。 变量命名很重要。

啊,还有一件事。如果您调整上面的代码,可以将@foreach()$pages一起使用:

@foreach($pages AS $sPage)
// using `$sPage` to not conflict with `$page` from `compact()`
<li>
  <a href="{{ route('service.Index', $sPage->page_slug) }}">
    {{ $sPage->page_title }}
  </a>
</li>

总而言之,这里的问题是冲突/命名不正确的变量。 View::share('page', ...)compact('page')都在视图中设置了$page,一个是Collection,可以与@foreach()一起使用,另一个是一个{{ 1}}实例,其行为有所不同。