Хочу делать всё правильно, потому интересуюсь.
Есть контроллер 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 в мобильных приложениях либо через соц. авторизацию. Правильно распределенная по слоям логика и принцип единой ответственности поможет вам избежать багов.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть функции, которые проверяют начинается или заканчивается ли строка другой подстрокой:
Если выполнить на стороне js (при sumbit формы, например) $(this)serialize(), то в переменной получим данные формы в виде строки, которую можно спокойно...