我有一个laravel app的目录结构,如下所示:
app/
admin/
controllers/
views/ -> for admin views
...
views/ -> for frontend views
如何在admin中设置控制器的视图路径?我不想使用View::addLocation
或View::addNamespace
,因为我可能拥有与admin和frontend相同的视图文件名,并且不想为每个{{1添加命名空间}}。
我在http://laravel.com/api/4.2/Illuminate/View/View.html中看到有View::make('namespace::view.file')
方法,但我该怎么称呼它? setPath
引发了未定义的方法错误。
答案 0 :(得分:16)
您有两种方法可以实现目标。首先,我们来看看app/config/view.php
。这就是定义视图加载的路径的地方。
这是默认值:
'paths' => array(__DIR__.'/../views'),
您可以轻松地将管理目录添加到数组
'paths' => array(
__DIR__.'/../views',
__DIR__.'/../admin/views
),
现在最大的缺点是:视图名称必须是唯一的。否则,将首先指定路径中的视图
由于您不想使用视图命名空间,我认为您不需要像admin.viewname
这样的语法。你可能更喜欢方法2;)
可以使用 Config::set
方法在运行时更改每个Laravel配置。
Config::set('view.paths', array(__DIR__.'/../admin/views'));
显然设置配置不会改变任何东西,因为它在应用程序引导时加载,然后被忽略。
要在运行时更改路径,您必须创建FileViewFinder
的新实例
这是这样的:
$finder = new \Illuminate\View\FileViewFinder(app()['files'], array(app_path().'/admin/views'));
View::setFinder($finder);
您还可以删除app/config/view.php
'paths' => array(),
然后在任何情况下使用View::addLocation
(前端和管理员)
View::addLocation(app_path().'/views');
View::addLocation(app_path().'/admin/views');
答案 1 :(得分:1)
在Laravel 5.5中,其他解决方案无效。服务提供商的启动方法
View::getFinder()->prependLocation(
resource_path('views') . '/theme'
);
答案 2 :(得分:0)
在最新版本6中,我这样做是这样的:
View::getFinder()
->setPaths([
base_path('themes/frontend/views'),
base_path('themes/admin/views')]
)
答案 3 :(得分:0)
试试这个
View::addNamespace('admin', app_path() . '/admin/views');
Route::group(['prefix' => 'admin'], function() {
Route::get('/', function() {
return view('admin::index');
});
});