我有一个laravel app的目录结构,如下所示:
app/
admin/
controllers/
views/ -> for admin views
...
views/ -> for frontend views
Run Code Online (Sandbox Code Playgroud)
如何在admin中设置控制器的视图路径?我不想使用View::addLocation或View::addNamespace因为我可能有相同的视图文件名为admin和frontend,并且不想为每个添加命名空间View::make('namespace::view.file').
我在http://laravel.com/api/4.2/Illuminate/View/View.html中看到有一种setPath方法,但我怎么称呼它?View::setPath引发未定义的方法错误.
luk*_*ter 20
您有两种方法可以实现目标.首先,我们来看看app/config/view.php.这就是定义视图加载的路径的位置.
这是默认值:
'paths' => array(__DIR__.'/../views'),
Run Code Online (Sandbox Code Playgroud)
您可以轻松地将管理目录添加到阵列
'paths' => array(
__DIR__.'/../views',
__DIR__.'/../admin/views
),
Run Code Online (Sandbox Code Playgroud)
现在最大的缺点是:视图名称必须是唯一的.否则,将首先指定路径中的视图.
由于您不想使用视图命名空间,我想您不需要像这样的语法admin.viewname.你可能更喜欢方法2;)
可以使用该Config::set方法在运行时更改每个Laravel配置.
Config::set('view.paths', array(__DIR__.'/../admin/views'));
Run Code Online (Sandbox Code Playgroud)
显然设置配置不会改变任何东西,因为它在应用程序引导时被加载并在之后被忽略.
要在运行时更改路径,您必须创建一个新的实例FileViewFinder.
这是这样的:
$finder = new \Illuminate\View\FileViewFinder(app()['files'], array(app_path().'/admin/views'));
View::setFinder($finder);
Run Code Online (Sandbox Code Playgroud)
您还可以删除默认路径 app/config/view.php
'paths' => array(),
Run Code Online (Sandbox Code Playgroud)
然后View::addLocation在任何情况下使用(前端和管理员)
View::addLocation(app_path().'/views');
View::addLocation(app_path().'/admin/views');
Run Code Online (Sandbox Code Playgroud)
小智 6
在最新版本 6 中,我这样做:
View::getFinder()
->setPaths([
base_path('themes/frontend/views'),
base_path('themes/admin/views')]
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14408 次 |
| 最近记录: |