Pull to refresh
83
0
Денис @besisland

Программист

Send message
Конечно же, это должен делать контроллер. Я сделаю форму, в которой укажу эти 50 полей и назначу им валидаторы.
Валидацию можно сделать ответственностью модели, но совершенно не в той форме, в которой Вы предлагаете.

Можно сделать, чтобы сэттеры при передаче им некорректных данных выбрасывали исключение. Которое отлавливать в контроллере и информировать представление.

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

Поэтому делать валидацию данных ответственностью модели не следует, а вместо этого следует поручить это контроллеру, который и будет это контролировать.
$model->isValidData($this->_request->getPost())

Очень грубая ошибка.

Попробуйте всё-таки почитать «Википедию».
Форма — это НЕ модель. Zend_Form делает строго то, что без неё делают контроллер и представление.

Ещё раз повторяю, запишите форму без использования Zend_Form — увидите сами.

Хорошо, сделаю это за вас.

Простейший пример: форма редактирования имени контакта.

Контроллер:
public function editAction() {
    $contact = Contact::find($this->_request->id);
    if (empty($contact)) {
        throw new PageException_NotFound();
    }
    $errors = array();
    if ($this->_request->isPost()) {
        if (mb_strlen($this->_request->name) < 5) {
            $errors []= "Имя должно быть длиннее 4 символов";
        }
        if (empty($errors)) {
            $contact->setName($this->_request->name);
            $this->_redirect(self::getUrl($contact));
        }
    }
    $this->view->errors = $errors;
    $this->view->contact = $contact;
}


Представление:
<form action="" method="post">
    <p>
        <input type="text" name="name"
            value="<?= $this->escape($this->contact->getName()) ?>" />
        <button type="submit">Сохранить</button>
    </p>
</form>

Форма в том виде, в котором она представлена в Zend_Form, — это CV. И это очень плохо, как и MV, как и MC, как и любое другое смешение. M, V и C все должны быть строго отдельно, а как они взаимодействуют, уже дело другое.

Сделать форму как отдельную область контролирования; отдельно сделать набор вью-хэлперов или тех же декораторов как отдельную область представления — так я вижу формы.
Интересно, каким образом можно было счесть 2010-й год високосным. Он же не делится на 4 вообще. Распространена ошибка, когда считают каждый год, который делится на 4, високосным, забывая о том, что в григорианском календаре есть нюансы; но чтобы 2010-й посчитать високосным, это совсем странный алгоритм надо использовать.
Пробел восполнить, конечно же.
Какой аргумент? У Вас отсутствуют знания о базовых принципах архитектуры MVC («впервые слышите»). Я предлагаю Вам восполнить этот проблем и рекомендую, с чего начать.
Можете начать хотя бы с «Википедии», русской и английской. Узнаете много нового. Потом приступайте к чтению серьёзной литературы.
За что же так с Австралией-то…
Форма по самой своей природе является контроллером. В этом легко убедиться, записав форму без использования Zend_Form. Вынести в отдельный компонент захочется код, расположенный в SomeController::someAction.

Захочется вынести и HTML-код представления формы и её элементов. Но это уровень представления, а не контроллера и не модели. Для этого нужно сделать отдельный слой компонентов (похожих на зэндовские форм-декораторы), который будет привязываться к форме на уровне представления.
Если спросить меня, какой самый плохой компонент в Zend Framework, я отвечу: формы. Это ужасающее, душераздирающее нарушение MVC. Смешение, столпотворение и каша.
Точно, я и не подумал.
Да, действительно; в «Фаефоксе» тоже плохая система обновлений.
Я тоже могу. Зрение минус восемь.
Как раз для аудиокниг суют.
А в чём навороты? Главная составляющая цены, говорят, — экран, поскольку технология пока новая. Поэтому и стоят все примерно одинаково (при одинаковой диагонали).
После того, как пользователь привыкнет уверенно выполнять базовые задачи в приспособленном окружении, перейти к другому интерфейсу или более сложным задачам будет гораздо проще.
Зачем компьютер перезагружать или «финализировать» что-то? Вы, наверное, «Виндоусов» насмотрелись?
Это как в анекдоте про секретаршу, «опять отмонтировать забыла»?

Information

Rating
Does not participate
Location
Berlin, Berlin, Германия
Registered
Activity