Сброс всех помощников вида в Zend Framework - PullRequest
1 голос
/ 22 февраля 2011

Есть ли способ сбросить состояние всех помощников вида, например удалить все сценарии, добавленные с помощью headScript()? Скрипты и метатеги, добавленные в одном модульном тесте, видны в следующих модульных тестах, хотя я создаю новый контроллер и представление для каждого теста. Это вызывает ложные положительные и отрицательные стороны.

Ответы [ 2 ]

4 голосов
/ 23 февраля 2011

Рассматривая абстрактный класс для этих контейнеров (Zend_View_Helper_Placeholder_Container_Abstract), я вижу, что он расширяет ArrayObject .Каждый раз, когда вы set заменяете значения этого массива массивом, который оборачивает установленное вами значение.Когда вы append, он получает старые значения и снимает новое значение в массив.Таким образом, теоретически вы можете использовать метод exchangeArray для очистки любых значений, передав пустой массив (полностью не проверенный):

$this->view->headScript()->exchangeArray(array());
3 голосов
/ 23 февраля 2011

Комментарий Марцина привел меня к основной причине проблемы в нашей среде тестирования, которая заключается в том, что реестр заполнителя был добавлен в реестр Zend до запуска кода, который делает снимок реестра.Таким образом, когда выполнялся код, удаляющий все новые объекты реестра, он больше не удалял реестр заполнителей.

Чтобы сбросить состояние для всех помощников представления на основе заполнителей, используйте следующую команду:

$registry = Zend_Registry::getInstance();
unset($registry['Zend_View_Helper_Placeholder_Registry']);
...