PHP Zend Subform — просмотр декоратора скрипта на элементе субформы

У меня есть форма продуктов (придерживайтесь меня здесь), у которой есть подформа, которая идентифицируется индексом массива продуктов, и каждая из этих подформ содержит другую подформу (подформой), которая идентифицируется по идентификатору продукта и этому подразделу. -form содержит мульти-флажок, который отображает для каждого продукта две опции: выберите продукт и отметьте его как бесплатный.

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

Макет ниже.

products sub-form [
selection sub-form [
MultiCheckbox element[
decorator[
ViewScript[]
]
]
]
]

Вот моя форма. Возможно ли реализовать этот способ?

<?php

/**
* Properties_Form_Admin_Products
*/

/**
* Admin form for creating a new property
*
* @category    Properties
* @package     Form
*/
class Properties_Form_Admin_Products extends Cms_Form_DtDd {

/**
* @var Properties_Model_Property
*/
protected $_property;

/**
* @var Properties_Manager_Property
*/
protected $_propertyManager;

/**
* @var array
*/
private $products;

/**
* Initialize form (extended from Zend_Form)
*
* @return void
*/
public function init() {
parent::init();

$this->_propertyManager = Caboodle_Manager_Factory::get('Property');

$request = Zend_Controller_Front::getInstance()->getRequest();
$this->setMethod('post')
->setAttrib('id', 'product_form')
->setAttrib('class', 'page_form admin_form')
->setDecorators($this->formDecorators)
->setAction($this->getView()->url());

$subform = $this->addSubform(new Zend_Form_SubForm, 'products')
->getSubform('products')
->clearDecorators()
->addDecorator('FormElements');

// Add subform for each existing product time.
foreach ($this->getProducts() as $index => $product) {
$subform->addSubform(new Zend_Form_SubForm, (string) $index)
->getSubform((string) $product->getId())
->addElements(array(
new Zend_Form_Element_MultiCheckbox('selection', array(
'label' => $product->getName() . ' ('.$product->getDescription().')',
'decorators' => array(
// This form displays when the below decorator is commented out
array('ViewScript', array(
'viewScript' => '/partials/property-products.phtml',
'category' => 'Products',
'options' => $product
)
)
),
'multiOptions' => array(
'select' => 'Select',
'free' => 'Mark as free'
)
))
));
}

/* buttons */
$submit = new Zend_Form_Element_Submit('submit_btn');
$submit->setRequired(false)
->setIgnore(true)
->setLabel('Add and Pay')
->setAttrib('class', 'pos_btn')
->setDecorators($this->buttonDecorators);
$this->addElement($submit);

$this->addDisplayGroup(
array('submit_btn'), 'buttons', array('decorators' => $this->plainGroupDecorators)
);
}

/**
* Validate the form
*
* @param  array $data
* @return boolean
*/
public function isValid($data) {

parent::isValid($data);

return !$this->_errorsExist;
}

/**
* Handle all of the form processing for the login form
*
* @param Zend_Controller_Request_Abstract $request
* @return void
*/
public function processForm(Zend_Controller_Request_Abstract $request) {
if ($request->isPost()) {

if ($this->isValid($request->getPost())) { // valid
$values = $this->getValues();
}
}
}

/**
* @param $products
* @return $this
*/
protected function setProducts($products)
{
$this->products = $products;
return $this;
}

/**
* @return array
*/
public function getProducts()
{
return $this->products;
}

}

Заранее спасибо 🙂
Натан

1

Решение

Синтаксис моего декоратора был немного неправильным и ему не хватало одного внешнего массива. Вот как должен выглядеть декоратор:

'decorators' => array(
array(
'ViewScript', array(
'viewScript' => '/admin/partials/property-products.phtml',
'category' => 'services',
'options' => $product
)
)
)
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]