Духовность™
Продвинутый новичок
не получилась MVC(или её бледное подобие)
Решил тут попробовать по паттерну MVC сделать пару скриптов. Попробовать так сказать. Вкратце это так выглядело на примере скрипта редактирования пользователей и редактирования статей. Покажу на примере редактирования пользоватлей:
Файл users.php - "исполняемый" скрипт PHP. Он оперирует классами:
- class.user.php - это модель, умеет только вставлять и возвращать записи
- class.userEditController.php - код ниже
- представление делать не стал - отдавал нужные данные прямо в users.php и там php-native все делал.
Загвоздка случилась с т.н. контроллером. У меня такое впечатление, что я не совсем верно понял идею MVC в контексте ООП.
Вот какой контроллер у меня получился:
в скрипте users.php примерно это:
по сути получилось "что-то не так". Возникли вопросы:
1. Контроллер userEditController используется ТОЛЬКО В ЭТОМ СКРИПТЕ. Присобачить его к аналогичному, но немного отличающемуся скрипту редактирования пользоватлей во фронтенеде (когда пользователи сами себя правят) НЕ ПОЛУЧИЛОСЬ - слишком разные требования. Вывода два сделал - либо для подобного действия во фронтенде надо писать собственный контроллер (к чему больше склоняюсь), либо я лох.
2. Какой смысл в этом контроллере, если это можно сделать структурным подходом? Скрыть реализацию проверок заполнения полей и самиих действий?
3. В правильном ли направлении я вообще пошел?
Решил тут попробовать по паттерну MVC сделать пару скриптов. Попробовать так сказать. Вкратце это так выглядело на примере скрипта редактирования пользователей и редактирования статей. Покажу на примере редактирования пользоватлей:
Файл users.php - "исполняемый" скрипт PHP. Он оперирует классами:
- class.user.php - это модель, умеет только вставлять и возвращать записи
- class.userEditController.php - код ниже
- представление делать не стал - отдавал нужные данные прямо в users.php и там php-native все делал.
Загвоздка случилась с т.н. контроллером. У меня такое впечатление, что я не совсем верно понял идею MVC в контексте ООП.
Вот какой контроллер у меня получился:
PHP:
class userEditController
{
//...
// Основной и единственнный метод, который выполняет основную обязанность скрипта - либо обновляет,
// либо создает нового пользователя
public function doAction()
{
if (isset($_POST['submit']))
{
$this->validate();
if (!$this->err)
{
if (!$this->id_user)
{
$this->user = new newUser($_POST);
}
else
{
$this->user->update($_POST);
}
}
return true;
}
return false;
}
private function validate()
{
if (empty($_POST['name']))
{
$this->err[] = 'Ошибочка вышла!';
}
}
//...
}
PHP:
// ...
// Фактически это сингализирует о POST-запросе
if ($userController->doAction())
{
if ($err = $userController->getErr())
{
// ошибки отдаются переменным шаблона
}
else
{
// получаем ИД пользователя
$id_user = $userController->getUser()->getId();
if (IS_EDIT)
{
// Данные пользователя успешно изменены
}
else
{
// Пользователь успешно добавлен в систему
}
header('Location: ...');
}
}
1. Контроллер userEditController используется ТОЛЬКО В ЭТОМ СКРИПТЕ. Присобачить его к аналогичному, но немного отличающемуся скрипту редактирования пользоватлей во фронтенеде (когда пользователи сами себя правят) НЕ ПОЛУЧИЛОСЬ - слишком разные требования. Вывода два сделал - либо для подобного действия во фронтенде надо писать собственный контроллер (к чему больше склоняюсь), либо я лох.
2. Какой смысл в этом контроллере, если это можно сделать структурным подходом? Скрыть реализацию проверок заполнения полей и самиих действий?
3. В правильном ли направлении я вообще пошел?