我尝试将新框架的 Form 文件夹与 Zend Framework 1 中的文件夹交换,但没有成功。
我还尝试将 ZF1 指向库新的 Form 2.0 文件夹,但我也无法让它工作。
有人知道该怎么做吗?
我尝试将新框架的 Form 文件夹与 Zend Framework 1 中的文件夹交换,但没有成功。
我还尝试将 ZF1 指向库新的 Form 2.0 文件夹,但我也无法让它工作。
有人知道该怎么做吗?
可以将 ZF2 组件与 ZF1 一起使用,并且在大多数情况下相对简单。
首先,您需要将 zf2 克隆到您的库路径中,因此 cd 到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 视图助手中。