Сценарии другого представления зенда?

Стандартный метод 2018 года ECMAScript

Вы использовали бы , объект распространился :

let merged = {...obj1, ...obj2};

/** There's no limit to the number of objects you can merge.
 *  Later properties overwrite earlier properties with the same name. */
const allRules = {...obj1, ...obj2, ...obj3};

Вот также документация MDN для этого синтаксиса, и если Вы будете использовать столпотворение то - Вам будет нужно этот плагин для него для работы.

2015 ECMAScript (ES6) Стандартный метод

/* For the case in question, you would do: */
Object.assign(obj1, obj2);

/** There's no limit to the number of objects you can merge.
 *  All objects get merged into the first object. 
 *  Only the object in the first argument is mutated and returned.
 *  Later properties overwrite earlier properties with the same name. */
const allRules = Object.assign({}, obj1, obj2, obj3, etc);

(см. Ссылка JavaScript MDN )

Метод для ES5 и Ранее

for (var attrname in obj2) { obj1[attrname] = obj2[attrname]; }

Примечание, что это просто добавит все атрибуты obj2 к obj1, который не мог бы быть тем, что Вы хотите, если Вы все еще хотите использовать неизмененный obj1.

при использовании платформы, которая гадит на всем протяжении прототипов затем, необходимо стать более необычными с проверками как hasOwnProperty, но тот код будет работать на 99% случаев.

функция В качестве примера:

/**
 * Overwrites obj1's values with obj2's and adds obj2's if non existent in obj1
 * @param obj1
 * @param obj2
 * @returns obj3 a new object based on obj1 and obj2
 */
function merge_options(obj1,obj2){
    var obj3 = {};
    for (var attrname in obj1) { obj3[attrname] = obj1[attrname]; }
    for (var attrname in obj2) { obj3[attrname] = obj2[attrname]; }
    return obj3;
}

8
задан db83 13 August 2009 в 13:34
поделиться

4 ответа

Почему вы хотите отображать сообщения об ошибках в другом виде? Почему бы не встроить в представление условные выражения? Что-то вроде того, что если в форме есть ошибки, то эхо-сообщения, иначе эхо-форма.

Вы можете использовать $ this -> _ forward для перехода к другому действию с соответствующим представлением. Вы можете передать все, что пожелаете. Просто передайте объект формы, он содержит все сообщения об ошибках. Или вы можете получить определенные сообщения об ошибках или все они из объекта формы и передать их в представление или действие.

4
ответ дан 5 December 2019 в 06:54
поделиться

Ну, с контроллера вы можете перенаправить их на другое действие в другом контроллере:

$this->_forward($newactionname,
                        $newcontrollername,
                        $newmodulename,
                        Array($parameters_to_pass);
    }

или вы просто визуализируете другой файл представления:

$this->render('index_alternative');
11
ответ дан 5 December 2019 в 06:54
поделиться

FlashMessenger может быть частью решения? http://framework.zend.com/manual/en/zend.controller.actionhelpers.html

0
ответ дан 5 December 2019 в 06:54
поделиться

Не используйте _forward (), если вы перенаправляете к действиям в том же контроллере, просто вызовите действие напрямую, используя $ this-> fooAction (), вместо этого -> _ forward ('foo' ...

Причина в производительности и ошибках, которые могут возникнуть из-за конструирования контроллера wtice. Когда вы вызываете _forward, снова запускается не только предиспетч (чего и следовало ожидать ), но init () и конструктор также вызывается снова. Если ваш контроллер расширен от других контроллеров, то все эти контроллеры также будут вызываться, включая их init (). Если у вас есть код в вашем init (), он будет запустите дважды, и если вы пишете в базу данных, он напишет строку дважды! Избегайте всего этого и вызывайте действие напрямую и вместо этого используйте $ this-> render ().

Вы можете легко увидеть эту проблему, если профилируете ваш код,

9
ответ дан 5 December 2019 в 06:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: