Я пытаюсь построить красноречивую модель «Платформы», которая может реализовать некоторую логику так же, как компоненты на основе драйверов.
Немного общего фона: у меня есть модель laravel под названием Платформы, в которой есть несколько общих методов. Но в зависимости от конкретной «платформы», я хотел бы создать несколько пользовательских методов, которые можно использовать только для этой конкретной платформы. Это может быть как метод подключения или похожий.
Таким образом, мой подход заключался в том, чтобы делать как компоненты на основе драйвера, которые расширяют Illuminate\Support\Manager
, потому что мне нужен какой-то контракт на методы. И я хотел бы, чтобы методы были доступны, когда я загрузил конкретную «платформу».
Я знаю, что могу просто написать каждый метод в самой модели или включить как метод-дескриптор для каждой платформы. В итоге у меня будет около 10 платформ с 5-ю пользовательскими методами, так что все будет очень быстро.
Я бы предпочел не строить его как компонент, потому что мне нужны отношения с другими моделями.
Другой способ объяснить это может быть так: скажем, у вас есть группа пользователей, которые могут получать SMS-уведомления из приложения, пользователь может затем выбрать, какого SMS-провайдера использовать. (например, как Nexmo) Это будет class SMSProvider extends model
, который имеет определенные методы, такие как send
Таким образом, вы можете сделать $user->SMSProvider->send()
Этот метод отправки должен быть специфичным для конкретного поставщика, простокак в документации: https://laravel.com/docs/6.x/notifications#sms-notifications
Можете ли вы дать мне несколько советов о том, как я должен выглядеть или кодировать?