0

我正在使用 Zend Framework 1.12 开发一个 Web 应用程序,这对我来说是新事物,我不确定如何去做我想做的事情。

编辑:当我谈论模块时,我的意思是控制器,对不起,我仍然误解了这些术语......

在我的主页上,模块索引,我做了我想做的事,创建了几个动作和所有的东西,但我想添加一个我自己做的搜索引擎。

问题是我想将搜索引擎创建为一个名为 Search 的单独模块,但是将 SearchForm 放在主页中。点击提交会将表单中的数据发送到搜索模块。

我不太明白如何做到这一点,而不必去 /search 访问我的表单和每个相关的操作。

我必须使用 View Helper 吗?

此外,首页中的 searchForm 将是某种 QuickKSearch,访问 /search 将显示更详细的研究表单。

有人可以解释我如何从 Index 模块访问 searchForm 或将我重定向到文档中讨论的部分吗?我的研究没有成功,谷歌也没有帮助我。

编辑:当我谈论模块时,我的意思是控制器,对不起,我仍然误解了这些术语......

4

2 回答 2

1

首先,将搜索表单构建为 viewHelper,然后您可以在多个视图中重用它。表单片段中的 action 属性设置为 searchModule/controller/action。

另外在 Zend 文档中研究 viewHelpers 和 Forms。

于 2012-11-28T16:42:49.497 回答
0

实际上,我更喜欢将其用作操作助手,然后仅使用标准占位符视图助手来呈现搜索表单。

让我演示一下:

实际的操作助手只是启动一个表单并准备显示。我将把表单结构留给你。

//the action helper
//Just fill in the args for the form to be displayed
class NameSpace_Controller_Action_Helper_Search extends Zend_Controller_Action_Helper_Abstract
{
    public function direct($action, $label = null, $placeHolder = null)
    {
        $form = new Application_Form_Search();
        //set the action
        $form->setAction($action);
        //set the submit button text
        $form->search->setLabel($label);
        //set the hint text displayed in the form window
        $form->query->setAttribs(array('placeholder' => $placeHolder,
            'size' => 27,
        ));

        return $form;
    }
}

我将助手放在控制器的预调度方法中,以便控制器中的每个操作都可以使用搜索表单,而不必在每个页面中构建它。

//to use the helper in your controller
class IndexController extends Zend_Controller_Action
{

    public function preDispatch()
    {
        //setup action helper and assign it to a placeholder
        $this->_helper->layout()->search = $this->_helper->search(
                '/index/display', 'Search Collection!', 'Title');
    }

//in your view script
<?php echo $this->layout()->search ?>

我喜欢将占位符放在我的主 layout.phtml 中,以便在我填充占位符时它会显示。现在你所要做的就是随心所欲地设计它。

请记住:与任何 html 表单一样,action 参数只是一个 url,因此任何有效的 url 都可以分配给表单操作。在此示例中,我使用了/controller/action参数,但还有许多其他方法可以将 url 传递给表单。想到 url 助手是一个很好的方法。

url($urlOptions, $name, $reset, $encode):根据命名路由创建 URL 字符串。$urlOptions 应该是特定路由使用的键/值对的关联数组。

于 2012-11-29T07:51:28.460 回答