我有一个小型的私人项目来学习ZF2。我已经将Zend Lucene
集成为Search Function
。这很好用,但是我现在想在我的布局中集成一个搜索字段,以便在所有页面上都可用。我真的不确定如何实现这一目标。首先,我是否正确通过View Helper
完成此操作?如您在下面看到的,我不知道要输入__invoke()
来输入我的助手的Search Form
是什么。我的方法总体上是正确的还是有更好的方法?我想要一个好的ZF2
解决方案,有人可以给我一些建议吗?预先非常感谢。
好的,到目前为止我做了什么:
1。我创建了一个表单:
namespace Advert\Form;
use Zend\Form\Form;
class SearchForm extends Form
{
public function __construct()
{
parent::__construct('search');
$this->setAttribute('method', 'post');
$this->add(array(
'name' => 'query',
'attributes' => array(
'type' => 'text',
'id' => 'queryText',
'required' => 'required'
),
'options' => array(
'label' => 'Search String',
),
));
$this->add(array(
'name' => 'submit',
'attributes' => array(
'type' => 'submit',
'value' => 'Search'
),
));
}
}
2。创建了一个View Helper DisplaySearchForm.php! 2.更新!!!
非常感谢AlexP的帮助!]]
namespace Advert\View\Helper; use Zend\View\Helper\AbstractHelper; use Zend\Form\ElementInterface; class DisplaySearchForm extends AbstractHelper { protected $form; public function __construct($form) { $this->form = $form; } public function __invoke($form = null) { if ($form) { $this->form = $form; } return $this->render($this->form); } public function render($form) { // return $this->getView()->form($form); // To use my own Style, I have added a Partial return $this->getView()->render('partial/search', array('form' => $form)); } }
我读到某个地方说在Helper中使用ServiceLocator不好,所以我考虑在Factory中进行此操作,然后从中获取Form。所以我创建了一个工厂(不确定工厂是否正确)
3。创建的工厂
namespace Advert\View\Helper; use Zend\ServiceManager\FactoryInterface; use Zend\ServiceManager\ServiceLocatorInterface; class DisplaySearchFormFactory implements FactoryInterface { public function createService(ServiceLocatorInterface $serviceLocator) { $realServiceLocator = $serviceLocator->getServiceLocator(); $form = $realServiceLocator->get('FormElementManager')->get('\Advert\Form\SearchForm'); $helper = new DisplaySearchForm($form); return $helper; } }
4。我在模块中注册了工厂。php
public function getViewHelperConfig() { return array( 'factories' => array( 'displaySearchForm' => 'Advert\View\Helper\DisplaySearchForm', ) ) }
5。在我的布局layout.phtml
<?php echo $this->displaySearchForm(); ?>
我有一个小型的私人项目来学习ZF2。我已经将Zend Lucene集成为搜索功能。效果很好,但是我现在想在我的布局中集成一个搜索字段,以便可以在...
AbstractHelper
具有返回“渲染器”的getView()
。这意味着您可以使用所需的所有视图助手,就像在视图脚本中一样。