Laravel – Как реализовать общий контроллер с привязкой маршрута рабочей моделиPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Laravel – Как реализовать общий контроллер с привязкой маршрута рабочей модели

Сообщение Anonymous »

Прежде всего, я использую Laravel 6 и PHP 7.2.
Хорошо. У меня есть различные модели, на которых я могу проделать одно и то же действие. Чтобы быть DRY, я придумал следующую идею:
В каждой модели я реализую интерфейс и помещу фактическую реализацию для обработки действия в один вызываемый контроллер.
Дело в том, что я не знаю, как создать привязку маршрута рабочей модели с такой реализацией.
Чтобы облегчить понимание моего вопроса, привожу несколько фрагментов кода:
  • Модели

    Код: Выделить всё

    class Post extends Model implements Actionable { /* attributes, relationships, etc. */ }
    

    Код: Выделить всё

    class Comment extends Model implements Actionable { /* attributes, relationships, etc. */ }
    

    Код: Выделить всё

    class User extends Model implements Actionable { /* attributes, relationships, etc. */ }
    
  • Контроллеры

Код: Выделить всё

class DoActionOnActionable extends Controller
{
public function __invoke(Actionable $actionable, Request $request) {
// implementation
}
}
Я знаю, что Laravel должен выполнить привязку маршрута модели, ему нужно знать, какую модель к этому привязать. Я сделал контроллер DoActionOnActionable абстрактным и создал еще 3 контроллера в одном и том же файле (что меня немного раздражает, потому что он в основном повторяется):

Код: Выделить всё

class DoActionOnUser extends DoActionOnActionable
{
public function __invoke(User $user, Request $request) {
parent::__invoke($user, $request);
}
}

Код: Выделить всё

class DoActionOnPost extends DoActionOnActionable
{
public function __invoke(Post $post, Request $request) {
parent::__invoke($post, $request);
}
}

Код: Выделить всё

class DoActionOnComment extends DoActionOnActionable
{
public function __invoke(Comment $comment, Request $request) {
parent::__invoke($comment, $request);
}
}
  • Маршруты

Код: Выделить всё

Route::post('/users/{user}/actions', 'DoActionOnUser');
Route::post('/posts/{post}/comments/{comment}/actions', 'DoActionOnComment');
Route::post('/posts/{post}/actions', 'DoActionOnPost');
Проблема в том, что когда я отправляю запрос на эти маршруты, ответ занимает столько времени, что я отменяю запрос. Итак, я думаю, что что-то не так, и это работает не так, как я ожидал.
Я ценю все, что помогает мне понять мою проблему с реализацией или лучшее решение моей проблемы (СУХОЙ). п>

Подробнее здесь: https://stackoverflow.com/questions/651 ... te-binding
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»