如何在laravel中设置视图文件路径?

时间:2014-12-13 11:47:32

标签: laravel

我有一个laravel app的目录结构,如下所示:

app/
   admin/
      controllers/
      views/ -> for admin views
   ...
   views/ -> for frontend views

如何在admin中设置控制器的视图路径?我不想使用View::addLocationView::addNamespace,因为我可能拥有与admin和frontend相同的视图文件名,并且不想为每个{{1添加命名空间}}。

我在http://laravel.com/api/4.2/Illuminate/View/View.html中看到有View::make('namespace::view.file')方法,但我该怎么称呼它? setPath引发了未定义的方法错误。

4 个答案:

答案 0 :(得分:16)

您有两种方法可以实现目标。首先,我们来看看app/config/view.php。这就是定义视图加载的路径的地方。

这是默认值:

'paths' => array(__DIR__.'/../views'),

方法1:加载两个目录

您可以轻松地将管理目录添加到数组

'paths' => array(
    __DIR__.'/../views',
    __DIR__.'/../admin/views
),

现在最大的缺点是:视图名称必须是唯一的。否则,将首先指定路径中的视图 由于您不想使用视图命名空间,我认为您不需要像admin.viewname这样的语法。你可能更喜欢方法2;)

方法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);

方法3:使用addLocation但没有默认路径

您还可以删除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');
  });
});