Я попытался заменить папку Form нового фреймворка папкой Zend Framework 1, но это не сработало.
Я также пытался указать ZF1 в библиотеке новую папку Form 2.0, но я тоже не могу заставить это работать.
Кто-нибудь знает, как это сделать?
Я попытался заменить папку Form нового фреймворка папкой Zend Framework 1, но это не сработало.
Я также пытался указать ZF1 в библиотеке новую папку Form 2.0, но я тоже не могу заставить это работать.
Кто-нибудь знает, как это сделать?
Компоненты ZF2 можно использовать с ZF1, и по большей части это относительно просто.
Прежде всего вам нужно будет клонировать zf2 в путь к вашей библиотеке, поэтому перейдите к library
и введите: -
git clone https://github.com/zendframework/zf2.git Zf2
Это создаст папку Zf2 в библиотеке.
Теперь нам нужно сообщить автозагрузчику, как найти файлы zf2. в вашем бутстрапе добавьте следующее: -
protected function _initZf2()
{
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->pushAutoloader(new App_Loader_Autoloader_Zf2(), 'Zend');
}
Затем создаем автозагрузчик. У меня есть пространство имен App_, которое включено в application.ini с помощью этой строки:
autoloadernamespaces[] = "App_"
и я создал автозагрузчик в App/Loader/Autoloader/Zf2.php: -
class App_Loader_Autoloader_Zf2 implements Zend_Loader_Autoloader_Interface
{
public function autoload($class)
{
if(strstr($class, '\\')){
$zf2Class = explode('\\', $class);
$path = 'Zf2/library/' . implode('/', $zf2Class) . '.php';
include_once $path;
}
}
}
Теперь zf1 знает, где найти классы zf2, когда представлено правильное пространство имен. Мы можем создать форму, например Application/Forms/Zf2.php:
use Zend\Form\Form;
use Zend\Form\Element;
use Zend\Form\Element\Text;
class Application_Form_Zf2 extends Form
{
public function prepareElements()
{
$this->add(array(
'name' => 'name',
'options' => array(
'label' => 'Your name',
),
'attributes' => array(
'type' => 'text',
),
));
}
}
Теперь в вашем контроллере вы можете создать экземпляр формы zf2:
$this->view->form = new Application_Form_Zf2();
$this->view->form->prepareElements();
Поскольку мы используем представление ZF1, у нас нет автоматического доступа к помощники представлений, которые используются для рендеринга форм ZF2, поэтому мы должны явно создавать их экземпляры в представлении по мере необходимости:-
$form = $this->form;
$formHelper = new \Zend\Form\View\Helper\Form();
$formText = new \Zend\Form\View\Helper\FormText();
$formLabel = new \Zend\Form\View\Helper\FormLabel();
echo $formHelper->openTag($form);
echo $formLabel($form->get('name'));
echo $formText($form->get('name'));
echo $formHelper->closeTag($form);
Это выведет следующий HTML: -
<form action="" method="POST">
<label for="name">Your name</label>
<input name="name" type="text" value="">
</form>
Этот метод дает вам большой контроль над выводом ваших форм, и я бы рекомендовал скрыть часть кода, который я поместил в файл phtml выше, в помощнике представления ZF1.