2

我正在尝试在laravel 5.3. 我已经建立了一些服务提供商来收集域名、正在使用的主题和那些特定网站的数据库。现在我正在尝试使用view structurethrough来实现页面service provider。例如,现在我为两个不同的域有两个不同的主题。我在不同文件夹的视图中有一组 HTML 代码,如下所示:

View
----| Theme One
--------| Navbar
--------| Sliders
--------| Tabs
--------| Parallax
--------| Iconbox
--------| template.blade.php
----| Theme Two
--------| Navbar
--------| Sliders
--------| Tabs
--------| Parallax
--------| Iconbox
--------| template.blade.php

现在我想为这些域动态定义文件夹结构,以便它应该显示它们各自主题的模块。就像假设如果我想包含 Navbar 的子视图,我只需要写

@include('Navbar')

它应该访问相应的主题导航栏文件夹或子视图。我想建立一个服务提供者并尝试通过配置来设置这样的路径:

public function boot()
{
    $this->webView = $this->setPath();
    $this->app->singleton('webView', function()
    {
        return $this->webView;
    });
}

public function setPath()
{
    $themename = App::make('themename')
    if($themename)
    {
        $setpath = "..Path\Views\" . $themename;
        Config::set('view.paths', $setpath);
        return null;
    }
    else
    {
        return "Not found";
    }
}

但我猜当应用程序引导时它会忽略配置,我知道必须有更好的方法来实现它。请指导我。

4

1 回答 1

7

首先像这样创建一个或ViewServiceProviderApp\Providers这样复制Illuminate\View\ViewServiceProviderapp/Providers更改

<?php

namespace App\Providers;

use Illuminate\View\FileViewFinder;
use Illuminate\View\ViewServiceProvider as ConcreteViewServiceProvider;

class ViewServiceProvider extends ConcreteViewServiceProvider
{
    /**
     * Register the view finder implementation.
     *
     * @return void
     */
    public function registerViewFinder()
    {
        $this->app->bind('view.finder', function ($app) {
            $paths = $app['config']['view.paths'];

            //change your paths here
            foreach ($paths as &$path)
            {
                $path .= time();//change with your requirement here I am adding time value with all path
            }

            return new FileViewFinder($app['files'], $paths);
        });
    }
}

Illuminate\View\ViewServiceProvider::class,然后用App\Providers\ViewServiceProvider::class,in替换你的config/app.php。这会成功的。

于 2017-01-10T14:15:31.997 回答