Хочу делать всё правильно, потому интересуюсь.
Есть контроллер SiteController с actionRegistration, который отображает страницу регистрации. Страница - это множество форм, множество ajax (это всё в планах). Например, есть форма, которая отправляет на добавление данные в таблицу базы данных people. Для этой таблицы есть модель People. А дальше вопросы
actionAddPeople) или же все запросы должны быть к actionRegistration? Т.е. в этом экшены я буду все аяксы разделать и принимать решение, что делать и т.п.actionRegistration или же вынести как отдельный метод класса SiteController. Или же вынести его как метод модели People?Сейчас начал всё писать, учиться. И возникли такие вопросы. На данный момент у меня отдельно actionRegistration для вывода страницы регистрации. И отдельный
actionAddPeople для отправки на него ajax запросов. И в нём вся логика работы с запросом
/**
* Записывает в БД данные нового человека, принимая их по ajax
*
* @return string
* @throws HttpException
*/
public function actionAddNewPeople()
{
if (!Yii::$app->request->isAjax) throw new HttpException('404', 'Ошибка. Недопустимый метод');
try {
$peopleModel=new People();
$peopleModel->load(Yii::$app->request->post());
$peopleModel->save();
} catch (Exception $e){
throw new HttpException('404', $e->getMessage());
}
return json_encode([
'id_people' => $peopleModel->getPrimaryKey(),
'message' => 'Данные нового человека успешно записаны',
]);
}
Помогите разобраться, пожалуйста.
1) Одно действие - один метод.
actionRegistration отрисовывает форму регистрации
actionAddNewPeople принимает ajax конкретной формы, валидирует, сохраняет и отдает список ошибок (если нужно)
2)
Выносить в отдельный метод контроллера не нужно. Т.к. контроллер предназначен только для приема запроса, возможно, первичной обработки параметров и проверки доступа. Дальше он передает эти параметры в модели/менеджеры и пр. и возвращает результат.
Так же контроллер несет ответственность за возвращаемое значение.
Выносить в отдельный метод в модели не вижу смысла. По сути, что вы делаете в данном методе:
И этот контроллер прекрасно все делает стандартными методами модели, городить из них метод просто чтобы вызывать это одной строкой неправильно.
Отдельный метод в модели можно будет создать если появится какая-то дополнительная логика сохранения или валидации входных данных, которую не реализовать стандартными возможностями модели.
Например не делать в контроллере проверку входных данных, а отдать это модели.
P.S.: Если этой логики будет много, то можно и вынести, но при этом не забывать про слои приложения. Какой компонент за что отвечает.
Почему так.
Сайт/приложение со временем может масштабироваться. И, к примеру, сегодня у вас регистрация только здесь, а завтра через API в мобильных приложениях либо через соц. авторизацию. Правильно распределенная по слоям логика и принцип единой ответственности поможет вам избежать багов.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей