Php 可以将Zend Form 2与Zend Framework 1一起使用吗?

Php 可以将Zend Form 2与Zend Framework 1一起使用吗?,php,zend-framework,zend-form,zend-framework2,Php,Zend Framework,Zend Form,Zend Framework2,我尝试将新框架的表单文件夹与Zend framework 1中的表单文件夹进行交换,但没有成功 我还尝试将ZF1指向新的Form 2.0文件夹库,但我也无法使其正常工作 有人知道怎么做吗?将ZF2组件与ZF1一起使用是可能的,并且在大多数情况下这是相对简单的 首先,您需要将zf2克隆到您的库路径中,以便将cd复制到library并键入:- git clone https://github.com/zendframework/zf2.git Zf2 这将在library下创建一个Zf2文件夹 我

我尝试将新框架的表单文件夹与Zend framework 1中的表单文件夹进行交换,但没有成功

我还尝试将ZF1指向新的Form 2.0文件夹库,但我也无法使其正常工作


有人知道怎么做吗?

将ZF2组件与ZF1一起使用是可能的,并且在大多数情况下这是相对简单的

首先,您需要将zf2克隆到您的库路径中,以便将cd复制到
library
并键入:-

git clone https://github.com/zendframework/zf2.git Zf2
这将在library下创建一个Zf2文件夹

我们现在需要告诉自动加载程序如何查找zf2文件。在引导中添加以下内容:-

protected function _initZf2()
{
    $autoloader = Zend_Loader_Autoloader::getInstance();
    $autoloader->pushAutoloader(new App_Loader_Autoloader_Zf2(), 'Zend');
}
然后我们创建自动加载器。我有一个名为App_u的名称空间,它包含在application.ini中,行为:-

autoloadernamespaces[] = "App_"
我在App/Loader/autoloader/Zf2.php中创建了autoloader:-

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视图助手中。

我认为这不是不可能的,因为ZF的所有组件都是松散耦合的。因此,所有组件都可以单独使用。但是,不能使用ZF1代码访问ZF2表单组件,因为它已完全重写。另请参见:我相信您想说“在ZF1中”而不是“在ZF2中”?非常感谢您的回答。。。星期一我会试试……:)