Защищенное свойство с массивом строк возвращает недопустимое смещение строки 'options'
Я работаю с этой реализацией Tactician
для Laravel.
Когда я следую этой сути и создаю массив middleware
программного обеспечения, я получаю ошибку Illegal string offset 'options'
.
<?php
namespace App\Http\Controllers;
use App\Commands\TestCommand;
use App\Commands\TestHandler;
class HomeController extends Controller
{
protected $bus;
protected $middleware = [
'App\Commands\GenerateOrderValidator',
'Joselfonseca\LaravelTactician\Middleware\DatabaseTransactions'
];
public function __construct()
{
$this->bus = app('Joselfonseca\LaravelTactician\CommandBusInterface');
}
public function __invoke()
{
$this->bus->addHandler(TestCommand::class, TestHandler::class);
return $this->bus->dispatch(TestCommand::class, [], $this->middleware);
}
}
Но если я помещаю массив непосредственно в dispatch
Я знаю, что они некоторые подобные вопросы решены об этом, но я действительно хочу понять, почему его работа в return $this->bus->dispatch(TestCommand::class, [], [
'App\Commands\GenerateOrderValidator',
'Joselfonseca\LaravelTactician\Middleware\DatabaseTransactions'
]);
Ответы - Защищенное свойство с массивом строк возвращает недопустимое смещение строки 'options' / Protected property with an array of strings returns Illegal string offset 'options'

16.11.2019 06:14:01
Это связано с тем, что Laravel уже определяет свойство $middleware
в классе контроллера (исходный код здесь), и каждый элемент в этом массиве должен иметь следующую структуру, поскольку используется внутренне для обработки промежуточных программ маршрута:
$this->middleware[] = [
'middleware' => $m,
'options' => &$options,
];
Затем следует переименовать свойство, чтобы избежать конфликтов.
