Защищенное свойство с массивом строк возвращает недопустимое смещение строки 'options'

Защищенное свойство с массивом строк возвращает недопустимое смещение строки 'options'

16.11.2019 06:00:26 Просмотров 64 Источник

Я работаю с этой реализацией 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'

Является ответом!
mdexp

16.11.2019 06:14:01

Это связано с тем, что Laravel уже определяет свойство $middlewareв классе контроллера (исходный код здесь), и каждый элемент в этом массиве должен иметь следующую структуру, поскольку используется внутренне для обработки промежуточных программ маршрута:

$this->middleware[] = [
    'middleware' => $m,
    'options' => &$options,
];

Затем следует переименовать свойство, чтобы избежать конфликтов.

https://stackoverflow.com/questions/58892005/protected-property-with-an-array-of-strings-returns-illegal-string-offset-optio/58892122#comment104049557_58892122
Работая, я подозревал, что это было что-то напрямую связанное с Laravel, спасибо приятель!
Закрыть X