不久前才开始学习Laravel,我对视图有疑问。
我有2个查看文件(刀片)。
显示数据库中类别的一个。
另一个是在产品中显示as搜索的结果。
我想在同一视图中使用它们,在第一部分中是搜索器区域,下面是我要列出类别的区域。
我尝试了一些方法使其正常运行,但是我不确定哪种方法正确:
我在控制器中创建了一个函数,在其中列出了类别并处理了搜索并将其发送到视图,但是我不喜欢这种方法,因为我在一个函数中处理了两种不同的逻辑。 / p>
我试图将视图文件产生或@include到主视图中。我收到一个错误,因为在这种情况下没有发生数据库查询。我认为会产生收益,并且只包含静态数据。
因此,我不知道如何正确处理该问题。
有人可以建议我解决这个问题吗?
谢谢您的帮助!
答案 0 :(得分:1)
您必须只获得一次$categories
并将$categories
传递给所有视图(或需要分类或仅将其传递给categories.blade.php
的视图)。
为此,我建议创建一个名为categories.blade.php
的局部刀片,并在其中显示所有类别,并在需要时将其包括在内,但在此之前,请转到app/Provider/AppServiceProvider.php
并在boot()
方法中获取类别并在您创建的类别刀片中共享它,如下所示:
public function boot() {
// pass to first param, address categories blade
View()->composer('categories', function ($view){
// set a name for variable that get it in categories view
$view->with(['categories'=>$categories]);
});
}
如果您想了解有关订阅的更多信息,请访问此link或Laravel docs
答案 1 :(得分:0)
可以有几种方法。 您可以尝试在刀片文件中获取类别数据。 因此,例如,在category.blade中,您可以从数据库中获取类别列表。 然后它将独立于其他视图文件和控制器。 并且您可以例如包含category.blade.php。
第二种方法是通过Ajax获取类别数据。
在这种情况下,不能在使用类别的所有页面中插入脚本。
因此,在这种情况下,您可以使用模板结构。
例如。
在template.blade.php
<!DOCTYPE html>
<html class="no-js css-menubar" lang="en">
@stack('style')
@include('admin.layouts.head')
@include('admin.layouts.header')
@include('admin.layouts.page')
@include('admin.layouts.footer')
@stack('script')
</html>
在page.blade.php
<div class="page">
@yield('page-content')
</div>
在单个页面中
@extends('admin.layouts.template' ,['menu'=>'coach'])
@section('insert-css')
your custom css content here
@endsection
@section('page-content')
Your page content here
@endsection