如何在Laravel中将包视图添加到主视图?

时间:2018-08-22 13:21:43

标签: laravel laravel-blade

好的,所以我在Laravel项目中构建了多个软件包,但是每个软件包都有一些管理方面的功能,例如博客和论坛。现在我有了我的主要项目,除了为所有软件包提供纯基础之外,它所做的还不过。

我有自己的主导航管理模板,现在我想知道是否有办法从软件包中动态加载此菜单的扩展名?这是整个结构:

Resources 
     - views
        - cp
           - homer //Name of the template
             - master.blade.php
             - components
                 - nav.blade.php

现在在我的包裹中,我将具有以下结构

views
    - cp
        - components
            - nav.blade.php

将所有具有相同结构的软件包合并到一起,将所有nav.blade.php合并在一起的最佳步骤是什么?

2 个答案:

答案 0 :(得分:2)

您可以通过发布供应商文件来了解Laravel如何通过电子邮件和其他通知视图执行此操作。以下是相关文档:publishing views

  

要向Laravel注册软件包的视图,您需要告诉Laravel视图位于何处。您可以使用服务提供商的 loadViewsFrom 方法执行此操作。 loadViewsFrom 方法接受两个参数:视图模板的路径和包的名称。例如,如果包的名称是Courier,则应将以下内容添加到服务提供商的引导方法中:

public function boot() { 
    $this->loadViewsFrom(__DIR__.'/path/to/views', 'courier'); 
}
  使用 package :: view 语法约定引用

包视图。因此,一旦您的视图路径在服务提供商中注册,就可以从快递包中加载admin视图,如下所示:

Route::get('admin', function () { 
   return view('courier::admin'); 
});

答案 1 :(得分:0)

结果,我最终创建了自己的服务,如下所示:

<data android:scheme="http"
      android:host="xxxxnativeapp"
      android:pathPrefix="/createpassword" />

这将读出我创建自己的软件包的正确文件夹

之后,我更新了AppServiceProvider

在启动功能中,我做了以下

namespace App\Services;

class ComposerService {

    public function getLoadedPackages()
    {
        $folders = scandir(base_path('packages/author'));

        unset($folders[0]);
        unset($folders[1]);
        unset($folders[2]);

        return $folders;
    } 
}

现在我可以在刀片中访问main_nav并像使用

 /** @var \App\Services\ComposerService $compiler */
    $compiler = new ComposerService();

    $packages = $compiler->getLoadedPackages();

    $compiled = '';

    foreach($packages as $package)
    {
        $compiled .= view('prefix-'.$package.'::cp.components.nav')->render();
    }

    View::share('main_nav', $compiled);

现在它会打印出我对每个软件包的所有导航视图。