2

我正在尝试学习 Zend 框架!我对它很感兴趣,但我找不到说明它应该是 Zend_Form 类的存储位置的教程!也许这是很简单的事情,但我还不能明白......我看过关于这个的教程:

<?php
 class Form_Example extends Zend_Form
 {
  public function init()
  {
   // Great code here
  }
 }

但是他们都没有说这段代码去哪里了??????在目录树的哪个文件夹中的文件中?我已经阅读并且理解并且我已经做了一个关于模块、控制器、动作、布局的小例子,并且我知道命名约定和文件夹结构的重要性。那么这个表单类必须去哪里以及如何从视图中调用它?

非常感谢,我知道这对于已经知道如何使用 Zend Framework 的人来说一定很容易 =)

4

3 回答 3

2

我通常将所有表单与模型、控制器和视图放在一个表单文件夹中。

所以,我的文件结构如下:

application ->
  configs
  layouts
  plugins
  controllers
  models
  views
  forms ->
    form1.php
    form2.php

在您的应用程序中使用它们并不是那么简单。您必须在控制器中实例化表单类,然后将表单传递给您的视图。所以在你的控制器中你想要这样的东西:

$form1 = new Application_Form_Form1($options);
$request = $this->getRequest();

if($request->isPost()) {
  if($form1->isValid($post))  {
    // form is valid, do form processing here
  }
}

$this->view->form1 = $form1;

然后在视图文件中,放置表单:

<html>
<body>
  <div id="body">
    <?php echo $this->form1; ?>
  </div>
</body>
</html>
于 2012-09-07T22:10:11.860 回答
2

最好的方法是让 ZF 为您做这件事。ZF 为 windows 和 *nix 提供了一个命令行界面。

在您可以键入的命令行中zf create form Example,ZF 将创建一个以Example.php默认应用程序级别位置命名的空表单。

通常这将是 atapplication/forms/Example.php并且类名将是Application_Form_Example.

如果您需要在模块中构建表单,则命令将类似:
zf create form Example -m admin
where-m表示您希望在模块中创建文件,并且admin是模块的名称。

表单是 Zend Framework 中预定义的资源之一,因此具有默认位置。还有一些其他资源是预定义的并具有默认值。

模块资源自动加载器

Zend Framework 附带了 Zend_Loader_Autoloader_Resource 的具体实现,其中包含资源类型映射,涵盖 Zend Framework MVC 应用程序的默认推荐目录结构。这个加载器 Zend_Application_Module_Autoloader 带有以下映射:

    forms/          => Form
    models/         => Model
    models/DbTable/ => Model_DbTable
    models/mappers/ => Model_Mapper 
    plugins/        => Plugin 
    services/       => Service views/
    helpers         => View_Helper
    filters         => View_Filter 

例如,如果您有一个前缀为“Blog_”的模块,并尝试实例化类“Blog_Form_Entry”,它将在资源目录的“forms/”子目录中查找名为“Entry.php”的文件。当使用 Zend_Application 的模块引导时,默认情况下会为每个离散模块创建一个 Zend_Application_Module_Autoloader 实例,允许您自动加载模块资源。

于 2012-09-08T02:28:18.510 回答
2

您问题的核心是以下问题:

  1. 自动加载
  2. ZF 自动装载机的一般工作原理,以及
  3. ZF 自动加载器在标准 ZF 应用程序中的默认配置方式

这实际上是三个不同但明显相关的问题。

假设您有默认的 ZF 安装,其中appnamespace设置为“应用程序”,然后命名您的表单类Application_Form_Example并将其存储在文件中application/forms/Example.php

然后您可以使用以下方法实例化(例如在控制器中):

$form = new Application_Form_Example().

确保您resources.modules[] =application/configs/application.ini.

有关自动加载的更多讨论,请参阅https://stackoverflow.com/a/10933376/131824

于 2012-09-08T06:01:09.830 回答