Что лучший способ состоит в том, чтобы организовать контроллеры. Позволяет говорят, что у меня есть пользовательский контроллер и действие регистра, должен я иметь process_registration действие также, где я проверяю и обрабатываю данные или просто делаю всю обработку в рамках самого действия регистра. Если у меня есть действие проверки/обработки для каждого действия, которое требует его (регистр, process_registration.. и т.д.)
Я также замечаю, что у большого количества людей есть модули и контроллеры только для проверки и обработки информации, (я предполагаю для хранения всей логики проверки и правил в одном месте, возможно?)
Я предполагаю, что мой вопрос, как далеко независимо вещи должны быть разделены? Этот вопрос идет для Моделей и Представлений также.
Обычно ваша валидация должна происходить в модели; в этом суть парадигмы MVC. Логика контроллера заключается в том, что между действиями пользователя происходит скачок, представления предназначены исключительно для представления, а бизнес-логика находится в моделях.
Некоторые фреймворки (CodeIgniter) сильно расходятся с намерением MVC, делая модели плоскими объектами, которые не имеют логики (валидации или другой), требуя от вас переместить вашу логику валидации в уровень контроллера, но в этот момент ваши "модели" не являются моделями вообще, а являются прославленными массивами.
Что касается двух действий "регистр" и "process_register", то мне кажется, что гораздо чище иметь одно действие, которое по-разному реагирует на сообщения и запросы. Я бы назвал это действие "create", чтобы все оставалось RESTful, и чтобы везде, где бы ваш фреймворк не определял маршруты для "/register" к "/user/create"
Пример псевдо-php:
<?php
class User_controller {
// [GET|POST] /users/create
function create() {
$user = new User();
$error = '';
if (postback) {
// form has been submitted.
$user->name = $_POST['name'];
$user->password = $_POST['pasword'];
if (validate_user($user)) {
$user->save();
redirect("user/show/$user->id");
}
// user save failed, fall through to displaying the new user form
// the user's name and password (and other fields) are now populated,
// and will display
$error = 'Account creation failed.';
}
// Render the view with the user and the error message (if any)
render('views/users/create', $user, $error);
}
}
?>
Полагаю, лучший совет, который я могу дать, основываясь на вашем вопросе, заключается в том, что вы захотите разделить ваши действия внутри контроллера до такой степени, что вы захотите сделать ваш сайт модульным. Вы также должны иметь в виду, что существуют расходы как на обработку, так и на SEO, если вы постоянно переходите от одного действия к другому, потому что действия должны быть связаны с уникальными URL-адресами.
Вот один вариант использования, в котором вы хотели бы отделить регистрацию от действия регистрации: Вы хотите иметь возможность зарегистрировать пользователя через AJAX в различных местах сайта. С помощью другого действия для перехода на страницу регистрации и обработки регистрационных данных, вы, скорее всего, сможете повторно использовать действия как для страницы регистрации, так и для регистрационного лайтбокса или ящика быстрой регистрации на любой странице.
Случай, когда вы не захотите разделять обработку регистрационных данных и страницу регистрации, это случай, когда вы планируете иметь только статическую страницу регистрации. Таким образом, вы можете проверить и убедиться, что вы получаете данные формы и выполняете отображение и обработку формы в одном действии
.Я считаю, что лучше всего сохранить валидацию и "обработку" в модели. Используйте контроллер только для управления отображением запроса на функцию модели.
Этот раздел из "Zend Framework: Surviving The Deep End" может быть хорошим чтением.
.