Laravel: 2 модели, 1 контроллер - PullRequest
0 голосов
/ 20 февраля 2019

Не обязательно связано только с Laravel, но я работаю над сайтом, где пользователи могут зарегистрироваться и, если они хотят, они могут подписаться на платный план.

Если они не подписываются, онивсе еще можете перемещаться по сайту и видеть очень ограниченный контент (всего несколько параграфов каждой статьи).

Этот сайт имеет две модели: Пользователь и План.Первоначально идея состояла в том, чтобы позволить пользователям выбирать из нескольких планов, однако используется только один план: «Премиум».

Когда они подписываются на План, они остаются в этом плане, пока не изменят свое мнение и не будутвзимается каждый месяц.

У меня есть UserController со следующими методами: индексировать, создавать, хранить, показывать, редактировать, обновлять и UserPlanController с теми же методами.Когда пользователь решает отменить свою подписку на План, я просто вызываю UserPlanController :: update (), который в основном меняет статус с «активный» на «отменен».Они могут оставаться бесплатными пользователями или также могут отменить свою учетную запись (изменив статус пользователя с «активный» на «отмененный»).

Мне было предложено создать кнопку «Отмена» для бэк-офисаагенты, которые отменят подписку на платный план, а также аннулируют учетную запись пользователя (установите оба статуса на «отменено»), но оставляют возможность отмены только подписки.

Я думал просто создать новуюконтроллер и отмените обе функции, но я бы предпочел не дублировать код для выполнения этих двух действий, и у меня уже есть один контроллер для каждого ресурса, поэтому мне нужно создать третий контроллер для выполнения обоих действий?

Другой вариант, который я имею в виду, это просто сделать два ajax-запроса к обоим конечным точкам: Нажмите «Отмена» -> Ajax-запрос, чтобы отменить подписку -> Ajax-запрос, чтобы отменить учетную запись пользователя, но я не уверен, еслиэто просто «хакерский» обходной путь.

Любая помощь будет оценена,

Спасибо за объявлениеВанс

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Сначала у вас должна быть модель для ваших планов и для ваших пользователей, которая имеет дело только с операциями с этими структурами данных.

UserController использует модель User, а UserPlanController использует модель Plan (и / илимодель пользователя)

Теперь вы можете в функции UserController: cancelUserAccount проверить, есть ли у пользователя план, и отменить его.

use User;
use Plan;

class UserController {
    public function cancelAccount(Request $request, User $user){
        $plans = Plan::where('user_id', $user->id);
        foreach($plans as $plan){
            $plan->destroy();
        }

        $user->destroy();
    }
}
0 голосов
/ 20 февраля 2019

Если 2 контроллера используют одни и те же методы, отредактируйте, обновите и удалите некоторые из них, к которым у них нет доступа, почему бы не использовать промежуточное программное обеспечение?

Вы можете иметь один контроллер и определять доступ с помощьюпромежуточное ПО.

тогда вы можете назначить маршруты от одного плана этому промежуточному программному обеспечению и ограничить доступ к нему.Вы даже можете использовать route :: groups для очистки кода.

php artisan make:middleware paid

в методе handle проверьте пользователя

в файле route.php.

Route::group(['middleware'=>array('web','paid')],function(){
   //paid members routes...
   Route::get ....
});

Route::group(['middleware'=>array('web')],function(){
   //regular members routes...
   Route::get ....
});

Я думаю, что это будет легче поддерживать, так как у вас будет 1 контроллер для методов, удалите дублирующие действия и организуйте больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...