Как установить назначение папки просмотра во время выполнения в 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);

Ура !!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]