med*_*iev 2 php model-view-controller zend-framework
我目前在搜索控制器中有一个搜索表单,所以我能找到它的唯一方法是通过/search/.我必须重构我的代码,以便此搜索表单不仅出现在搜索控制器中,还出现在整个站点的全局中.
(代码不完全,因为我必须重新键入一些)
我的课程扩展Zend_Form位于application/forms/forms/SearchForm.php:
class Form_SearchForm extends Zend_Form {
public function init() {};
}
Run Code Online (Sandbox Code Playgroud)
我的搜索控制器就像..
class SearchController extends Zend_Controller_Action
{
public function search() {
$searchForm = new Form_SearchForm();
$this->view->form = $searchForm;
}
}
Run Code Online (Sandbox Code Playgroud)
在我的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;
Run Code Online (Sandbox Code Playgroud)
}
我想知道我可以在哪里存储我的代码,以便在视图中生成全局搜索表单.
我的全局布局文件位于application/layouts/scripts/layout.phtml并且当前吐出动态内容区域:
<div id="main">
<?php echo $this->layout()->content;?>
</div>
Run Code Online (Sandbox Code Playgroud)
我应该只将表单添加到此layout.phtml中,还是应该使用一些通用控制器?
编辑:很抱歉没有指定这个,但是如果我想不包括1-2特殊页面(可能是管理部分)怎么办...如果我将它硬编码到layout.phtml它仍然会出现..或应该我提供不同的布局文件,管理区域?
创建a searchAction()对性能不利,因为它需要一个全新的调度周期.如果且仅当您拥有非常复杂的逻辑来证明单独的操作时,您可以创建一个Controller插件并添加searchAction()到ActionStack中.如果您只是实例化/分配表单,或者如果您不需要每个请求的搜索表单,那么它不是最佳解决方案.
另一种可能性是在引导程序中实例化并分配表单.这种打破了关注点的分离,但提供了更好的性能.
protected function _initSearchForm()
{
$this->bootstrap('view');
$view = $this->getResource('view');
$searchForm = new Form_SearchForm();
$view->searchForm = $searchForm;
return $searchForm;
}
Run Code Online (Sandbox Code Playgroud)
最后,我首选的解决方案是自定义视图助手:
<?php
class My_View_Helper_SearchForm extends Zend_View_Helper_Abstract
{
public function searchForm()
{
$searchForm = new Form_SearchForm();
return $searchForm;
}
}
Run Code Online (Sandbox Code Playgroud)
对于这些解决方案中的任何一个,您最好在布局文件中输出表单,以最大限度地减少重复.
layout.phtml:
<?php echo $this->searchForm() ?>
Run Code Online (Sandbox Code Playgroud)
并admin.phtml为管理区域页面创建备用布局.这使您可以灵活地在弹出新需求时更改管理页面.
| 归档时间: |
|
| 查看次数: |
343 次 |
| 最近记录: |