Laravel view.php использует переменную config :: get в base_path

Я пытаюсь сделать это в 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

Как это исправить? Потому что все, что я пытаюсь, не работает.
Спасибо заранее!

1

Решение

Вы должны перенести эту логику в свой 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);
});
}
}
1

Другие решения

Краткий ответ: да. Добавьте это в начало файла:

use Illuminate\Support\Facades\Config;
1

Вы можете использовать конфиг— а также запрос-помощники в конфигурационных файлах вашего приложения.

'paths' => [
realpath(base_path(
'resources/views/layouts/' . config('api.' . request('domain') . '.layout')
)),
],
0
По вопросам рекламы [email protected]