Я пытаюсь построить 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)));
});
}
Помоги мне с этим.
Ну, я продолжал пытаться умереть сбросить код и попытался проверить $app
массив. Я думаю, когда я пытаюсь сделать App::make::('config')
laravel собирает информацию из файлов конфигурации и показывает массив конфигурации приложения, в котором динамическая конфигурация не отображается.
Тогда я просто попытался проверить свои взгляды:
return view('template');
Он отображал блейд-файл / просматривал именно то, что мне было нужно, ну, может, это кому-нибудь поможет. Не паникуйте с
$app = App::make('config');
dd($app);
Ура !!
Других решений пока нет …