Хорошо. У меня есть различные модели, на которых я могу проделать одно и то же действие. Чтобы быть 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
}
}
Код: Выделить всё
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
Мобильная версия