Как установить назначение папки просмотра во время выполнения в laravel

Я пытаюсь построить saas application (saas здесь означает программное обеспечение как сервис) в laravel 5.3. Я пытаюсь реализовать назначение папки просмотра путем расширения 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')

и это должно получить доступ к соответствующей папке 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)));
    });
}

Помоги мне с этим.

1 ответ

Решение

Ну, я продолжал пытаться умереть сбросить код и попытался проверить $app массив. Я думаю, когда я пытаюсь сделать App::make::('config') laravel собирает информацию из файлов конфигурации и показывает массив конфигурации приложения, в котором динамическая конфигурация не отображается.

Тогда я просто попытался проверить свои взгляды:

return view('template');

Он отображал блейд-файл / просматривал именно то, что мне нужно, ну, может, кому-то это поможет Не паникуйте с

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

Ура!!

Другие вопросы по тегам