Laravel视图进入另一个视图

时间:2020-03-02 21:14:58

标签: laravel view laravel-blade

不久前才开始学习Laravel,我对视图有疑问。

我有2个查看文件(刀片)。

显示数据库中类别的一个。

另一个是在产品中显示as搜索的结果。

我想在同一视图中使用它们,在第一部分中是搜索器区域,下面是我要列出类别的区域。

我尝试了一些方法使其正常运行,但是我不确定哪种方法正确:

  1. 我在控制器中创建了一个函数,在其中列出了类别并处理了搜索并将其发送到视图,但是我不喜欢这种方法,因为我在一个函数中处理了两种不同的逻辑。 / p>

  2. 我试图将视图文件产生或@include到主视图中。我收到一个错误,因为在这种情况下没有发生数据库查询。我认为会产生收益,并且只包含静态数据。

因此,我不知道如何正确处理该问题。

有人可以建议我解决这个问题吗?

谢谢您的帮助!

2 个答案:

答案 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]);  
    });
}

如果您想了解有关订阅的更多信息,请访问此linkLaravel 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