1

我正在尝试saas application在 laravel 5.3 中构建一个(这里的 saas 是指软件即服务)。我正在尝试通过扩展ViewServiceProvider. 例如,我为两个不同的域有两个不同的主题。我在不同文件夹的视图中有一组 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')

它应该访问相应的主题导航栏文件夹或子视图。为了实现这一点,我扩展了ViewServiceProvider并且config/app.php我只是注释掉ViewServiceProvider并添加了WebViewServiceProvider我所做的,它没有设置目标,这是我的代码:

namespace Nitseditor\System\Providers;

use Illuminate\View\FileViewFinder;
use Illuminate\View\ViewServiceProvider;
use Nitseditor\System\Models\Domain;

class WebViewServiceProvider  extends ViewServiceProvider
{


    /**
     *  Register View Folder
     *
     * @return void
     */
    public function registerViewFinder()
    {

        $this->app->bind('view.finder', function ($app) {
            $paths = $app['config']['view.paths'];

            $http_req = php_sapi_name() == 'cli' ? 'noetic.com' : $this->app['request']->server('HTTP_HOST');
            $domainName = explode(":", $http_req)[0];
            $domain = Domain::where('domain_name', $domainName)->first();

            if($domain)
            {
                foreach ($domain->themes as $theme)
                {
                    $paths = 'Nitseditor\System\Resources\Views\Themes\\' . $theme->theme_name;
                }
            }

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

我的 config\app.php 看起来像:

//        Illuminate\View\ViewServiceProvider::class,
Nitseditor\System\Providers\WebViewServiceProvider::class,

在通过控制器执行和检查时,我可以看到视图的目标路径与默认路径相同

class DomainController extends Controller {

    public function checkDomain()
    {
        $app = App::make('config');
        dd($app);
    }
}

查看目录检查

编辑

好吧,我尝试在没有条件语句的情况下执行它恰好是相同的。

public function registerViewFinder()
{

    $this->app->bind('view.finder', function ($app) {

        $paths = 'Nitseditor\System\Resources\Views\Themes\Themeone';

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

帮我解决这个问题。

4

1 回答 1

0

好吧,我一直在尝试死转储代码并尝试检查$app数组。我想当我尝试做App::make::('config')laravel 从配置文件中收集信息并显示未显示动态配置的应用程序的配置数组时。

然后我只是尝试检查我的观点:

return view('template');

它准确地显示了我需要的刀片文件/视图,它可能会对某人有所帮助。不要惊慌

$app = App::make('config');
dd($app);

干杯!!

于 2017-01-12T17:39:57.137 回答