Я пытаюсь сделать это в laravel 5.2 view.php (отредактируйте base_path, чтобы использовать переменную config в строке):
<?php
use Illuminate\Support\Facades\Config;
use Illuminate\Support\Facades\Request;
return [
/*
|--------------------------------------------------------------------------
| View Storage Paths
|--------------------------------------------------------------------------
|
| Most templating systems load templates from disk. Here you may specify
| an array of paths that should be checked for your views. Of course
| the usual Laravel view path has already been registered for you.
|
*/
'paths' => [
realpath(base_path('resources/views/layouts/' . Config::get('api.' . Request::get('domain') . '.layout'))),
],
Но теперь я получаю эту ошибку:
Неустранимая ошибка: необработанное исключение «ReflectionException» с сообщением «Журнал классов не существует» в /Applications/AMPPS/www/loan/vendor/laravel/framework/src/Illuminate/Container/Container.php:734 трассировки стека: # 0 / Applications / AMPPS / www / loan / vendor / laravel / framework / src / Illuminate / Container / Container.php (734): ReflectionClass -> __ construct (‘log’) # 1 / Applications / AMPPS / www / loan / vendor / laravel /framework/src/Illuminate/Container/Container.php(629): Подсветка \ Container \ Container-> build (‘log’, Array) # 2 / Приложения / AMPPS / www / loan / vendor / laravel / framework / src / Подсветка / Foundation / Application.php (697): Подсветка \ Container \ Container-> make (‘log’, Array) # 3 / Приложения / AMPPS / www / loan / vendor / laravel / framework / src / Illuminate / Container / Container .php (849): Подсветка \ Foundation \ Application-> make (‘Psr \ Log \ LoggerI …’) # 4 / Приложения / AMPPS / www / займ / поставщик / laravel / framework / src / Illuminate / Container / Container .php (804): Подсветка \ Контейнер \ Контейнер-> resolClass (Object (ReflectionParameter)) # 5 / A pplications / AMPPS / www / loan / vendor / l в /Applications/AMPPS/www/loan/vendor/laravel/framework/src/Illuminate/Container/Container.php в строке 734
Как это исправить? Потому что все, что я пытаюсь, не работает.
Спасибо заранее!
Вы должны перенести эту логику в свой ViewServiceProvider
вместо того, чтобы пытаться сделать это непосредственно в файле конфигурации, это большой нет нет.
Итак, что мы собираемся сделать, это
php artisan make:provider MyViewServiceProvider
Что приведет к созданию файла, существующего по адресу:
App\Providers\MyViewServiceProvider
Теперь мы собираемся открыть config/app.php
, Найти существующий ViewServiceProvider::class
в этом файле и замените его на путь в пространстве имен выше. Это должно выглядеть примерно так:
//the old Illuminate\View\ViewServiceProvider::class
App\Providers\MyViewServiceProvider::class,
Теперь внутри registerViewFinder()
функция, мы можем перегружать наши пути просмотра.
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Config;
public function registerViewFinder()
{
$this->app->bind('view.finder', function ($app) {
$custom_path = base_path('resources/views/layouts/' . Config::get('api.' . $this->app->request()->get('domain') . '.layout')
$paths = array_merge(
[$custom_path],
$app['config']['view.paths']
);
return new FileViewFinder($app['files'], $paths);
});
}
Пройдя по этому маршруту, вы убедитесь, что ваш путь наблюдается первым. Если представление не найдено в этом пути, вы можете вернуться к Laravel
путь просмотра по умолчанию.
редактировать
Важно отметить, что вашему классу необходимо расширить ViewServiceProvider по умолчанию, и что вы должны объявить еще две функции, весь файл должен выглядеть следующим образом:
<?php
namespace App\Providers;
use Illuminate\View\ViewServiceProvider;
use Illuminate\Support\Facades\Config;
class MyViewServiceProvider extends ViewServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
parent::boot();
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
parent::register();
}
/**
* Register the view finder implementation.
*
* @return void
*/
public function registerViewFinder()
{
$this->app->bind('view.finder', function ($app) {
$custom_path = base_path('resources/views/layouts/' . Config::get('api.' . $this->app->request->get('domain') . '.layout')
$paths = array_merge(
[$custom_path],
$app['config']['view.paths']
);
return new FileViewFinder($app['files'], $paths);
});
}
}
Краткий ответ: да. Добавьте это в начало файла:
use Illuminate\Support\Facades\Config;