How to set view file path in laravel?

后端 未结 3 778
半阙折子戏
半阙折子戏 2020-12-18 08:04

I have a directory structure for laravel app like this:

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


        
相关标签:
3条回答
  • 2020-12-18 08:57

    In the latest version 6 i am doing it this ways:

    View::getFinder()
         ->setPaths([
               base_path('themes/frontend/views'), 
               base_path('themes/admin/views')]
         )
    
    0 讨论(0)
  • 2020-12-18 09:01

    You have two ways to accomplish your goal. First, let's have a look at app/config/view.php. That's where the path(s) for view loading are defined.

    This is the default:

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

    Method 1: Load both directories

    You can easily add the admin directory to the array

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

    Now the big disadvantage of this: view names have to be unique. Otherwise the view in the path specified first will be taken.
    Since you don't want to use a view namespace I suppose you don't want a syntax like admin.viewname either. You'll probably like method 2 more ;)

    Method 2: Change the view page at runtime

    Every Laravel config can be changed at runtime using the Config::set method.

    Config::set('view.paths', array(__DIR__.'/../admin/views'));
    

    Apparently setting the config won't change anything because it is loaded when the application bootstraps and ignored afterwards.

    To change the path at runtime you have to create a new instance of the FileViewFinder.
    Here's how that looks like:

    $finder = new \Illuminate\View\FileViewFinder(app()['files'], array(app_path().'/admin/views'));
    View::setFinder($finder);
    

    Method 3: Use addLocation but without default path

    You could also remove the default path in app/config/view.php

    'paths' => array(),
    

    And then use View::addLocation in any case (frontend and admin)

    View::addLocation(app_path().'/views');
    View::addLocation(app_path().'/admin/views');
    
    0 讨论(0)
  • 2020-12-18 09:04

    In Laravel 5.5, other solutions did not work. In boot method of a service provider

    View::getFinder()->prependLocation(
     resource_path('views') . '/theme'
    );
    
    0 讨论(0)
提交回复
热议问题