Я думаю, что то, что вы пытаетесь сделать (если я вас правильно понимаю), может быть достигнуто написанием пользовательского помощника представления формы. По этой причине я подготовил проект того, как это можно сделать. Не уверен, что это лучший способ сделать это, но он должен работать.
Во-первых, давайте создадим наш собственный помощник вида. По умолчанию это Zend_View_Helper_Form
. Zend_Form использует Zend_Form_Decorator_Form
для рендеринга, который в свою очередь использует Zend_View_Helper_Form
для фактического создания xhtml-представления формы. Таким образом, мы могли бы создать наш собственный помощник по форме, например, называется My_View_Helper_CustomForm
, что расширяет Zend_View_Helper_Form
следующим образом:
// Example file location: APPLICATION_PATH/views/helpers/CustomForm.php
class My_View_Helper_CustomForm extends Zend_View_Helper_Form {
/**
* Render HTML form
*
* @param string $name Form name
* @param null|array $attribs HTML form attributes
* @param false|string $content Form content
* @return string
*/
public function customForm($name, $attribs = null, $content = false)
{
// THE FOLLOWING FEW LINES ARE NEW.
// get myText and unset it from $attribs afterwards.
$myText = '';
if (array_key_exists('myText', $attribs)) {
$myText = $attribs['myText'];
unset($attribs['myText']);
}
// this is from orginal form view helper
$info = $this->_getInfo($name, $content, $attribs);
extract($info);
if (!empty($id)) {
$id = ' id="' . $this->view->escape($id) . '"';
} else {
$id = '';
}
if (array_key_exists('id', $attribs) && empty($attribs['id'])) {
unset($attribs['id']);
}
$xhtml = '<form'
. $id
. $this->_htmlAttribs($attribs)
. '>';
// THE NEXT LINE IS AGAIN NEW
// WE PUT $myText after opening <form> tag (as in your example).
$xhtml .= $myText . 'sadfsf';
// the rest of the form, as usuall.
if (false !== $content) {
$xhtml .= $content
. '</form>';
}
return $xhtml;
}
}
Где-то в Bootsrap.php вы должны добавить локализацию помощников вида в автозагрузчик. Вероятно, вы также можете сделать это, добавив каталог помощников вида в Zend_View. тем не менее, я просто делаю это с помощью автозагрузчика следующим образом:
$autoLoader = Zend_Loader_Autoloader::getInstance();
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
'basePath' => APPLICATION_PATH,
'namespace' => '',
));
$resourceLoader->addResourceType('view', 'views/helpers/', 'My_View_Helper_');
$autoLoader->pushAutoloader($resourceLoader);
Сделав это, я продемонстрирую пример кода в testAction, который будет использовать приведенную выше customForm:
$myForm = new My_Form_SomeForm();
// set your text you want to put in the form
// Just don't forget to unset it the new view helper.
$myForm->setAttrib('myText', 'asdasd');
// get form decorator (i.e. Zend_Form_Decorator_Form)
$formDecorator = $myForm->getDecorator('form');
// $formDecorator uses Form helper to actually cunstruct xhtml of the form.
// So we set our new helper (i.e. My_View_Helper_CustomForm)
// instead of default one (i.e. Zend_View_Helper_Form).
// setHelper() method takes only string, thus ZF will need to know how to find
// the new view helper. This was the reason I added it to the autoloader.
$formDecorator->setHelper('customForm');
$HTML = $myForm->render();
Надеюсь, что это будет полезно для вас и поможет вам решить проблему.