Laravel查看不同设计的文件夹结构

时间:2019-12-01 20:02:33

标签: laravel

我需要一些帮助-我想更改网站的整个设计,但是我希望可以选择切换回旧的设计。

我当前的文件夹结构是:

resources/views/frontend/...

我希望具有以下文件夹结构:

resources/views/frontend/v1/...
resources/views/frontend/v2/...

在我的配置文件中,我想要一个可变版本,该版本将保存活动模板的版本。

问题在于,现在我需要在所有Controllers和Views中使用此变量,这需要大量工作。我只想在“视图”中更改变量。是否有人面对过这种情况并有更好的解决方案?

2 个答案:

答案 0 :(得分:2)

如果您不需要从管理页面切换主题/设计,则只需在config/view.php文件中设置视图的路径:

    /*
    |--------------------------------------------------------------------------
    | View Storage Paths
    |--------------------------------------------------------------------------
    |
    | Most templating systems load templates from disk. Here you may specify
    | an array of paths that should be checked for your views. Of course
    | the usual Laravel view path has already been registered for you.
    |
    */

    'paths' => [
        resource_path('views'),
        resource_path('theme/v1/views'),
    ],

将加载resources/theme/views/中的视图以及resources/views目录中的视图。

请注意顺序:如果两个文件共享相同的名称,则定义的第一个路径将具有更高的优先级。

另一种防止文件名冲突的解决方案是使用命名空间视图。在您的AppServiceProvider中,将其添加到boot()方法中:

$this->loadViewsFrom(resource_path('theme2/views'), 'theme2');

请参见https://laravel.com/docs/6.x/packages#views

在两种情况下,都可以在配置中使用变量。例如,在您的config/app.php中:

return [
    // Leave the configuration and add:
    'theme' => 'v1',
];

然后,在config/view.php中:

    'paths' => [
        resource_path('views'),
        resource_path('theme/'.config('app.theme').'/views'),
    ],

如果要使用环境变量(在本地环境和生产环境中具有不同的主题):

    'paths' => [
        resource_path('views'),
        resource_path('theme/'.env('APP_THEME').'/views'),
    ],

并在您的.env中:

APP_THEME=v1

答案 1 :(得分:0)

我找到了解决方法:

我在启动方法中的app \ Providers \ AppServiceProvider.php中添加了名称空间:

$this->app['view']->addNamespace('theme', base_path().'/resources/views/frontend/.config('version'));

我需要在所有Controller和View中进行一些更改,但这只是一次。

在任何我更改的控制器中:

return view('frontend.partials.banner')->withBanner($banner);

收件人:

return view('theme::partials.banner')->withBanner($banner);

以及在以下任何视图中

@include('frontend.standing.partials.shorttable')

收件人:

@include('theme::standing.partials.shorttable')