2012-10-18 4 views
3

Я попытался обменять папку формы новой фреймворк с той, что был в Zend Framework 1, но это не сработало.Возможно использование Zend Form 2 с Zend Framework 1?

Я также попытался указать ZF1 в библиотеку новой папки Form 2.0, но я не могу заставить ее работать.

Кто-нибудь знает, как это сделать?

+0

Я думаю, что это невозможно! – RDK

+0

Я не думаю, что это невозможно, поскольку все компоненты ZF слабо связаны. Таким образом, все компоненты могут использоваться отдельно. Однако вы не можете использовать код ZF1 для доступа к компоненту формы ZF2, потому что он полностью переписан. См. Также: http://framework.zend.com/manual/2.0/en/ref/overview.html –

ответ

4

Возможно использовать компоненты 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/автозагрузчик/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/Формы/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, мы автоматически не имеют доступа к view helpers, которые используются для визуализации формы 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); 

Это будет выводить Fol мычание HTML: -

<form action="" method="POST"> 
    <label for="name">Your name</label> 
    <input name="name" type="text" value=""> 
</form> 

Этот метод дает много контроля над выводом ваших форм, и я рекомендовал бы пряча часть кода я поставил в файле PHTML выше прочь в помощник вида ZF1.

+0

Я считаю, что вы хотели сказать «в ZF1» не «в ZF2»? – markus

+0

Хорошо заметили, спасибо. – vascowhite

+0

Большое спасибо за ваш ответ ... Понедельник я попробую ... :) – Samuele

 Смежные вопросы

  • Нет связанных вопросов^_^