Создайте нового поставщика услуг с именем ViewServiceProvider
, затем в нем удалите регистр и методы загрузки и увеличьте его Illuminate\View\ViewServiceProvider
.
Затем добавьте этот метод:
public function registerBladeEngine($resolver)
{
// The Compiler engine requires an instance of the CompilerInterface, which in
// this case will be the Blade compiler, so we'll first create the compiler
// instance to pass into the engine so it can compile the views properly.
$this->app->singleton('blade.compiler', function () {
return new MyBladeCompiler(
$this->app['files'], $this->app['config']['view.compiled']
);
});
$resolver->register('blade', function () {
return new CompilerEngine($this->app['blade.compiler']);
});
}
Обратите внимание, что в методе singleton я использую ваш класс блейд-компилятора.
Затем откройте config/app.php
и замените запись \Illuminate\View\BladeServiceProvider::class
вашей собственной.поставщик услуг.
Таким образом, поставщик услуг должен выглядеть следующим образом:
namespace App\Providers;
use MyBladeCompiler
use Illuminate\View\ViewServiceProvider as BaseViewServiceProvider;
class ViewServiceProvider extends BaseViewServiceProvider
{
public function registerBladeEngine($resolver)
{
$this->app->singleton('blade.compiler', function () {
return new MyBladeCompiler(
$this->app['files'], $this->app['config']['view.compiled']
);
});
$resolver->register('blade', function () {
return new CompilerEngine($this->app['blade.compiler']);
});
}
}
Это работает за счет расширения поставщика услуг просмотра Illuminate, поэтому все существующие методы работают должным образом.Затем вам нужно переопределить метод registerBladeEngine()
, чтобы вызывался ваш переопределенный метод, а не тот, который есть у поставщика освещения.
В вашем переопределенном методе вы указываете, что вместо исходного должен использоваться ваш компилятор.
Затем вы указываете, что ваш поставщик услуг расширенного просмотра используется вместо подсвеченного,редактирование файла конфигурации app.php.