Все доступные в Laravel PHP атрибуты
Ищете что-то конкретное? Перейдите к интересующему вас атрибуту:
Определение наблюдателя ObservedBy
Атрибут ObservedBy
позволяет определить наблюдателя для модели. Это отличный способ сохранить модель чистой и перенести логику наблюдателя в отдельный класс.
use App\Observers\UserObserver;
use Illuminate\Database\Eloquent\Attributes\ObservedBy;
#[ObservedBy([UserObserver::class])]
class User extends Authenticatable
{
//
}
Определение глобальной области видимости ScopedBy
Атрибут ScopedBy
позволяет определить глобальную область видимости для модели. Это удобный способ применения общих ограничений запроса к модели.
namespace App\Models;
use App\Models\Scopes\ActiveScope;
use Illuminate\Database\Eloquent\Attributes\ScopedBy;
#[ScopedBy([ActiveScope::class])]
class User extends Model
{
//
}
Контекстные атрибуты
Laravel предоставляет удобный способ обработки инъекции зависимостей для определённых контекстов, таких как инъекция реализаций драйверов или значений конфигурации. Вместо того чтобы вручную настраивать контекстные привязки в сервис-провайдерах, Laravel предлагает ряд атрибутов контекстной привязки. Эти атрибуты упрощают процесс инъекции контекстно-специфических значений.
Возьмём следующие примеры:
namespace App\Http\Controllers;
use Illuminate\Container\Attributes\Auth;
use Illuminate\Container\Attributes\Cache;
use Illuminate\Container\Attributes\Config;
use Illuminate\Container\Attributes\DB;
use Illuminate\Container\Attributes\Log;
use Illuminate\Container\Attributes\Tag;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Contracts\Database\Connection;
use Psr\Log\LoggerInterface;
class PhotoController extends Controller
{
public function __construct(
#[Auth('web')] protected Guard $auth,
#[Cache('redis')] protected Repository $cache,
#[Config('app.timezone')] protected string $timezone,
#[DB('mysql')] protected Connection $connection,
#[Log('daily')] protected LoggerInterface $log,
#[Tag('reports')] protected iterable $reports,
)
{
// ...
}
}
Laravel даже позволяет внедрять текущего пользователя CurrentUser
в маршрут:
use App\Models\User;
use Illuminate\Container\Attributes\CurrentUser;
Route::get('/user', function (#[CurrentUser] User $user) {
return $user;
})->middleware('auth');
Удаление задания при отсутствии моделей DeleteWhenMissingModels
При внедрении моделей в задания можно использовать атрибут DeleteWhenMissingModels
для автоматического удаления задания, если внедрённая модель отсутствует в базе данных.
namespace Acme;
use Illuminate\Queue\Attributes\DeleteWhenMissingModels;
#[DeleteWhenMissingModels]
class ProcessPodcastJob
{
public function __construct(
public Podcast $podcast,
) {}
}
Загрузка модели без отношений WithoutRelations
Атрибут WithoutRelations
позволяет загрузить модель без отношений. Это может быть удобно, если нужно избежать загрузки ненужных данных.
class ProcessPodcastJob
{
public function __construct(
#[WithoutRelations]
public Podcast $podcast,
) {}
}
Если я что-то пропустил
Если вы знаете другие PHP атрибуты Laravel, пожалуйста, напишите мне (Christoph Rumpel) об этом в Twitter или отправьте PR на GitHub. Я с удовольствием добавлю их в этот список.
P.S. Можно написать в комментарии.