当前位置:  开发笔记 > 编程语言 > 正文

Zend - 重构以在网站上包含全局表单

如何解决《Zend-重构以在网站上包含全局表单》经验,为你挑选了1个好方法。

我目前在搜索控制器中有一个搜索表单,所以我能找到它的唯一方法是通过/search/.我必须重构我的代码,以便此搜索表单不仅出现在搜索控制器中,还出现在整个站点的全局中.

(代码不完全,因为我必须重新键入一些)

我的课程扩展Zend_Form位于application/forms/forms/SearchForm.php:

class Form_SearchForm extends Zend_Form {

    public function init() {};

}

我的搜索控制器就像..

class SearchController extends Zend_Controller_Action
{
    public function search() {
        $searchForm = new Form_SearchForm();
        $this->view->form = $searchForm;
    }
}

在我的Bootstrap.php中,我有一个模型自动加载器:

protected function _initAutoload() {
    $autoLoader = Zend_Loader_Autoloader::getInstance();
    $resourceLoader = new Zend_Loader_Autoloader_Resource(
        array(
        'basePath'  => APPLICATION_PATH,
        'namespace' => '',
        'resourceTypes' => array(
            'form' => array(
            'path' => 'forms',
            'namespace' => 'Form_',
            ),
            'model' => array(
            'path' => 'models/',
            'namespace' => 'Model_',
            ),
        ),
        )
    );

return $autoLoader;

}

我想知道我可以在哪里存储我的代码,以便在视图中生成全局搜索表单.

我的全局布局文件位于application/layouts/scripts/layout.phtml并且当前吐出动态内容区域:

layout()->content;?>

我应该只将表单添加到此layout.phtml中,还是应该使用一些通用控制器?

编辑:很抱歉没有指定这个,但是如果我想不包括1-2特殊页面(可能是管理部分)怎么办...如果我将它硬编码到layout.phtml它仍然会出现..或应该我提供不同的布局文件,管理区域?



1> Richard Nguy..:

创建a searchAction()对性能不利,因为它需要一个全新的调度周期.如果且仅当您拥有非常复杂的逻辑来证明单独的操作时,您可以创建一个Controller插件并添加searchAction()到ActionStack中.如果您只是实例化/分配表单,或者如果您不需要每个请求的搜索表单,那么它不是最佳解决方案.


另一种可能性是在引导程序中实例化并分配表单.这种打破了关注点的分离,但提供了更好的性能.

protected function _initSearchForm()
{
    $this->bootstrap('view');

    $view = $this->getResource('view');
    $searchForm = new Form_SearchForm();

    $view->searchForm = $searchForm;
    return $searchForm;
}

最后,我首选的解决方案是自定义视图助手:



对于这些解决方案中的任何一个,您最好在布局文件中输出表单,以最大限度地减少重复.

layout.phtml:

searchForm() ?>

admin.phtml为管理区域页面创建备用布局.这使您可以灵活地在弹出新需求时更改管理页面.

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有