Zend Framework Action Helper или что-то еще? - PullRequest
0 голосов
/ 13 января 2012

У меня есть необходимость в цепочках выбора в моем проекте Zend Framework: Страны-> Регионы-> Провинции-> Города.

Я использую форму Zend и намереваюсь повторно отправить для перезагрузки содержимогоцепочки выбора, когда один из них изменен.Я написал некоторый код в тесте PHPunit для имитации того, что мне понадобится в моих контроллерах.Мне потребуется использовать эту региональную структуру в нескольких различных формах на моем сайте, а также планирую улучшить с помощью AJAX.

Я не хочу дублировать этот код, поэтому где я должен его хранить и как он должен быть структурирован, чтобы я мог повторно использовать его функциональность.Я подумал, что, возможно, помощник по действиям?

public function testCanGetRegionalStructureFromUser() {
        $user = new \Entities\User;
        $user = $this->em->getRepository('Entities\User')->findOneByEmail('testuser@yahoo.com');

        $town = new \Entities\Town;
        $town = $user->getTowns_id();

        // if user has not town input, then use the default 
        if (is_null($town)) {
            $config = Zend_Registry::get('config');
            $defaulttownid = $config->towns->defaultid;
            $town = $this->em->getRepository('Entities\Town')->find($defaulttownid);
        }

        // get the town id
        $townid = $town->getId();

        //get the province
        $province = $town->getProvinces_id();
        $provinceid = $province->getId();

        //get the region
        $region = $province->getRegions_id();
        $regionid = $region->getId();

        //get the country
        $country = $region->getCountries_id();
        $countryid = $country->getId();

        $countrylist = $this->em->getRepository('Entities\country')->findActiveCountries();
        $regionlist = $this->em->getRepository('Entities\Region')->findActiveRegions($countryid);
        $provincelist = $this->em->getRepository('Entities\Province')->findActiveProvinces($regionid);
        $townlist = $this->em->getRepository('Entities\Town')->findActiveTowns($provinceid);
    }

список стран, список регионов и т. Д. Готовы ввести в мою форму в качестве параметров, которые будут использоваться для заполнения полей выбора.

1 Ответ

1 голос
/ 14 января 2012

Я думаю, что для этого случая создание составного Zend_Form_Element имеет больше смысла.

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

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

Элемент обеспечивает доступ к значениям данных.(customer, property) и decorator визуализирует отдельные элементы в группе и устанавливает необходимые обработчики событий и вызовы ajax (большая часть этого кода находится во внешнем файле .js.

Создание иРендеринг составных элементов
Аналогично вышеприведенной ссылке, Мэтью Вейер О'Пинни
Видео: создание составных элементов

...