Size: a a a

Laravel для начинающих

2021 January 29

AH

Andrey Helldar in Laravel для начинающих
Паша Финогентов
Ну получается что так, но тогда в других сервисах будет ошибка, так как они свои модели используют
Можно указать абстрактый метод Model
источник

ПФ

Паша Финогентов... in Laravel для начинающих
Объясню зачем, анализаторы выкидывают ошибку, что мол нет метода у класса Model
источник

Ж

Жертва интернета... in Laravel для начинающих
Опа, благодарю.
источник

ПФ

Паша Финогентов... in Laravel для начинающих
Либо проставлять phpdoc везде с классом, что тоже грязь
источник

ПФ

Паша Финогентов... in Laravel для начинающих
Либо абстрактный метод делать и реализовывать везде
источник

ПФ

Паша Финогентов... in Laravel для начинающих
Что тоже грязь
источник

AH

Andrey Helldar in Laravel для начинающих
Паша Финогентов
Объясню зачем, анализаторы выкидывают ошибку, что мол нет метода у класса Model
Так как сервис может юзаться разыми моделями, указывать

protected function cloneModel(): User|Post|Foo|Bar - плохо

Поэтому юзай док-блок типа:

/**
* @return Model|User|Foo|Bar
*/
protected function cloneModel(): Model
источник

ПФ

Паша Финогентов... in Laravel для начинающих
Andrey Helldar
Так как сервис может юзаться разыми моделями, указывать

protected function cloneModel(): User|Post|Foo|Bar - плохо

Поэтому юзай док-блок типа:

/**
* @return Model|User|Foo|Bar
*/
protected function cloneModel(): Model
Тоже будет ошибка, будет ругаться, что мол вы используете такой то User::foo, но нет гарантии, что вернётся User
источник

ПФ

Паша Финогентов... in Laravel для начинающих
можно /** @var */
источник

ПФ

Паша Финогентов... in Laravel для начинающих
Или можно забить хер и не использовать анализаторы в laravel на высоком уровне
источник

AH

Andrey Helldar in Laravel для начинающих
Паша Финогентов
Тоже будет ошибка, будет ругаться, что мол вы используете такой то User::foo, но нет гарантии, что вернётся User
Делаешь абстрактый класс, возвращающий Model, а в конечном классе:

/**
* @method User cloneModel()
*/
class UserClass extends MyService
{
}

/**
* @method Post cloneModel()
*/
class PostClass extends MyService
{
}
источник

ПФ

Паша Финогентов... in Laravel для начинающих
Всё-таки не обойтись без абстрактных методов/классов
источник

ПФ

Паша Финогентов... in Laravel для начинающих
Почему бы не сделать return type static::property
источник

AH

Andrey Helldar in Laravel для начинающих
Паша Финогентов
Почему бы не сделать return type static::property
В пыхе такое нельзя
источник

ПФ

Паша Финогентов... in Laravel для начинающих
Я про rfc
источник

AH

Andrey Helldar in Laravel для начинающих
Паша Финогентов
Почему бы не сделать return type static::property
Кстати, нечто такое уже сделано:

function foo(): User
источник

AH

Andrey Helldar in Laravel для начинающих
Указывает тип возвращаемых данных.

А в php 8 можно и так:

function foo(): Model|User|Foo|Bar
источник

ПФ

Паша Финогентов... in Laravel для начинающих
Та это понятно
источник

ПФ

Паша Финогентов... in Laravel для начинающих
Но всё же нельзя указать динамическое возвращаемый типа в зависимости от проперти верхнего класса. Вот в моём случае это было бы дико удобно.
источник

ПФ

Паша Финогентов... in Laravel для начинающих
И вроде с архитектурой проблем нет
источник