Zend Framework - Как изменить один параметр из объекта запроса - PullRequest
2 голосов
/ 14 сентября 2010

Отправленная форма на моем сайте возвращает массив данных запроса, который доступен с

$data = $this->getRequest();

Это происходит в контроллере, который собирает данные и затем передает этот массив моей модели для размещения / обновления вбаза данных.

Вот проблема.Что если я хочу манипулировать одним из значений в этом массиве?Ранее я извлекал каждое значение, присваивая его новому массиву, чтобы я мог работать с тем, что мне нужно.Вот так:

$data = $this->getRequest();
$foo['site_id'] = $data->getParam('site_id');
$foo['story'] = htmlentities($data->getParam('story'));

и затем я передаю массив $ foo модели для размещения / обновления в базе данных.

Все, что я делаю, это манипулирую этим одним значением (1011 * param), так что кажется, что это бесполезно - извлекать каждый из них и переназначать его, чтобы я мог это сделать.Кроме того, он менее гибок, так как я должен явно обращаться к каждому значению по имени.Лучше просто передать весь запрос модели, а затем избавиться от всего, что не нужно для базы данных.

Как бы вы это сделали?

1 Ответ

2 голосов
/ 14 сентября 2010

Снова отредактируйте: еще раз посмотрев на ваш вопрос, о чем я здесь говорю, все происходит в контроллере.Куда приземлится действие вашей формы.

Ну, у вас есть несколько вариантов.

Прежде всего $_GET все еще есть в ZF, так что вы можете просто получить к нему доступ.

Во-вторых, есть:

$myArray = $this->_request->getParams();

или

$myArray = $this->getRequest()->getParams();

, который будет возвращать все параметры в массиве, а не один за другим.

В-третьих, еслиформа размещена у вас:

$myArray = $this->_request()->getPost();

, которая работает с $this->_request->isPost(), которая возвращает true, если какая-то форма была опубликована.

О доступе ко всему, что, по вашему мнению, вы всегда можете просто в контроллере:

$this->view->myArray = $this->_request->getParams();

edit: правильно, я учил, что вы имели в виду вид, а не модель.Я думаю, я не понимаю эту часть вопроса.

Если вы хотите иметь дело с данными поста внутри вашей модели, просто:

$MyModel = new Model_Mymodels();

$data = $this->_request->getParams();
$data['story'] = htmlentities($data['story']);
$myModels->SetItAll($data);

А затем внутри вашей модели вы создаете SetItAll() (с лучшим именем) и разберитесь с ним там.

Редактировать: о, подождите!Я понялВы ненавидите анализировать ваш вклад один за другим с вашей техникой.Итак, то, что я показал вам о том, как получить доступ к этим данным, должно значительно упростить вашу жизнь.

edit: всегда есть маршрут Zend_Form, если параметры действительно приходят из формы.Вы можете создать код, чтобы связать его с вашей моделью и абстрагировать все это от контроллера.Но в конце дня, если вам нужно сделать что-то особенное для одного из ваших входов, вам нужно где-то его кодировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...