laravel 如何在运行时设置视图文件夹目标
How to set views folder destination during runtime in laravel
我正在尝试在 laravel 5.3 中构建一个 saas application
(此处的 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)));
});
}
帮我解决这个问题。
好吧,我一直在尝试死转储代码并尝试检查 $app
数组。我想当我尝试做 App::make::('config')
时 laravel 从配置文件中收集信息并显示未显示动态配置的应用程序配置数组。
然后我简单地尝试检查我的观点:
return view('template');
它显示的 blade file/views 正是我所需要的,它可能会对某些人有所帮助。不要惊慌
$app = App::make('config');
dd($app);
干杯!!
我正在尝试在 laravel 5.3 中构建一个 saas application
(此处的 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)));
});
}
帮我解决这个问题。
好吧,我一直在尝试死转储代码并尝试检查 $app
数组。我想当我尝试做 App::make::('config')
时 laravel 从配置文件中收集信息并显示未显示动态配置的应用程序配置数组。
然后我简单地尝试检查我的观点:
return view('template');
它显示的 blade file/views 正是我所需要的,它可能会对某些人有所帮助。不要惊慌
$app = App::make('config');
dd($app);
干杯!!