在我的ZF2应用程序中,我有多个模块,其中一个是“搜索”。它提供了搜索表单,搜索逻辑和数据库中的课程列表:
表单类
namespace Search\Form;
...
class CourseSearchForm extends Form {
private $cities;
public function __construct(array $cities) {
parent::__construct('courseSearch');
$this->setCities($cities);
$this->setAttribute('method', 'post');
$this->add(array(
'name' => 'keyword',
'attributes' => array(
'type' => 'text',
),
));
$this->add(array(
'name' => 'city',
'type' => 'Zend\Form\Element\Select',
'options' => array(
'label' => 'Stadt',
'value_options' => $this->cities
),
));
// ...
}
public function setCities(array $cities) {
$this->cities = $cities;
}
}
控制器类
namespace Search\Controller;
...
class SearchController extends AbstractActionController {
protected $courseTable;
public function searchAction() {
return $this->redirect()->toRoute('search-courses');
}
public function searchCoursesAction() {
$form = $this->getServiceLocator()->get('Search\Form\CourseSearchForm');
$request = $this->getRequest();
if ($request->isPost()) {
$courseSearchInput = new CourseSearchInput();
$form->setInputFilter($courseSearchInput->getInputFilter());
$form->setData($request->getPost());
if ($form->isValid()) {
$courseSearchInput->exchangeArray($form->getData());
$courses = $this->getCourseTable()->findAllByCriteria($courseSearchInput);
} else {
$courses = null;
}
} else {
$courses = null;
}
return new ViewModel(array(
'form' => $form,
'courses' => $courses,
'cities' => $this->getServiceLocator()->get('Cache\Model\CityStorage')->getCities(),
));
}
/**
* Gets a CourseTable object.
* @return Search\Model\CourseTable
*/
function getCourseTable() {
if (!$this->courseTable) {
$serviceLocator = $this->getServiceLocator();
$this->courseTable = $serviceLocator->get('Search\Model\CourseTable');
}
return $this->courseTable;
}
}
/module/Search/view/search/search/search-courses.phtml
...
<?php
$form = $this->form;
$form->setAttribute('action', $this->url('search-courses'));
$form->prepare();
echo $this->form()->openTag($form);
echo $this->formRow($form->get('keyword'));
echo $this->formRow($form->get('city'));
// ...
echo $this->formSubmit($form->get('submit'));
echo $this->form()->closeTag();
?>
<?php
if ($courses instanceof Zend\Db\ResultSet\ResultSetInterface) {
echo $this->render('search/search/list-courses.phtml', array(
'courses' => $courses
));
}
?>
现在,搜索表单应显示在网站的每个页面上。如何实现这样的全局表单视图?是否有“标准”方式/最佳做法?
THX
答案 0 :(得分:0)
您只需创建ViewHelper
即可。您将Form注入ViewHelper,然后渲染View并返回它。 ViewHelper本身看起来与ZfcUser在ZfcUser\View\Helper\ZfcUserLoginWidget
答案 1 :(得分:0)
显示它的某种方式:
激励你,
// menu user
$menu = $this->forward()->dispatch('edit_controller', array(
'action' => 'menu',
'item' => 'languages',
'id' => $id,
));
$viewmodel->addChild($menu, 'menu');
我更喜欢使用plugin forward