У меня возникла ошибка при внедрении зависимостей в компоненте Livewire

На сайте Laravel/Livewire я пытаюсь использовать внедрение зависимостей для определения класса обслуживания для чтения записи ключей/значений.

Я определил 2 класса: app/Library/Services/Interfaces/KeyDataInterface.php:

<?php

namespace App\Library\Services\Interfaces;

use App\Models\KeyData;

/**
 * Write/read key value into/from storage
 */
interface KeyDataInterface
{

    /**
     * Write key/value into storage
     *
     * @param string $key
     * @param string $value
     * @param int $durationInSeconds
     *
     * @return KeyData - created model
     */
    public static function write( string $key, string $value, int $durationInSeconds = 60 ): KeyData;
}

и реализация в app/Library/Services/KeyDataInDbService.php:

<?php

namespace App\Library\Services;

use App\Library\Services\Interfaces\KeyDataInterface;

use App\Models\KeyData;
use Carbon\Carbon;

/**
 * Write/read key value into/from db
 *
 */
readonly class KeyDataInDbService implements KeyDataInterface
{
    /**
     * Write key/value into db
     *
     * @param string $key
     * @param string $value
     * @param int $durationInSeconds
     *
     * @return KeyData - created model
     */
    public static function write( string $key, string $value, int $durationInSeconds = 60 ): KeyData {
        $keyData = KeyData::getByKey($key)->getByValue($value)->first();
//        scopeGetByValue
        if (!empty($keyData)) {
            $keyData->expired_at = Carbon::now('UTC')
                ->addSeconds($durationInSeconds);
            return $keyData;
        }

        return KeyData::create([
            'key' => $key,
            'value' => $value,
            'expired_at' => Carbon::now('UTC')->addSeconds($durationInSeconds)
        ]);
    }

}

Я связал их в app/Providers/AppServiceProvider.php:

public function register(): void
{
    $this->app->bind(
        'App\Library\Services\Interfaces\KeyDataInterface',
        'App\Library\Services\KeyDataInDbService'
    );
}

Но когда я попытался использовать компонент Livewire:

class TheTaskIsViewed extends Component
{
    ...
    public KeyDataInterface $keyDataService;

    public function boot(KeyDataInterface $keyDataService)
    {
        $this->keyDataService = $keyDataService;
    }


    public function mount(int $taskId)
    {

Я получил ошибку:

Property type not supported in Livewire for property: [{}]

В браузере я вижу указание на 12 строку файла, в котором всего 8 строк:

Компонент TheTaskIsViewed используется в resources/views/livewire/test.blade.php как:

<div class = "admin_page_container" id = "app_image_admin_page_container pt-64" x-cloak>
    <fieldset class = "p-1 m-1 mb-6 bordered">
        <legend class = "bordered">
            the-task-is-viewed
        </legend>
        <livewire:admin.the-task-is-viewed taskId = "5"/>
    </fieldset>
</div>

Почему у меня возникла эта ошибка и как ее исправить?

"laravel/framework": "^10.48.4",
"livewire/livewire": "^3.4.9",
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
130
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В общедоступных свойствах Livewire поддерживаются только некоторые типы. https://livewire.laravel.com/docs/properties#supported-property-types

Если вы не используете $keyDataService в представлении, сделайте его приватным или защищенным.

protected KeyDataInterface $keyDataService;

Если вы хотите использовать $keyDataService в представлениях, создайте собственный тип.

Другие вопросы по теме