i have small private project learn zf2. have integrated zend lucene
search function
. works well, want integrate search field in layout, available on pages. not sure how achieve this. first of all, correct done view helper
? can see below, have got no idea have enter __invoke()
of helper display search form
. way correct in general or there better way? zf2
solution, can give me advice? thank in advance.
okay, have done far:
1. created form:
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. created view helper displaysearchform.php !!! 2. update !!!
a big thank 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); // use own style, have added partial return $this->getview()->render('partial/search', array('form' => $form)); } }
i read somewhere not use servicelocator in helper, thought doing in factory, form. created factory (not sure factory right)
3. created factory
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. registered factory in module.php
public function getviewhelperconfig() { return array( 'factories' => array( 'displaysearchform' => 'advert\view\helper\displaysearchform', ) ) }
5. in layout layout.phtml
<?php echo $this->displaysearchform(); ?>
the abstracthelper
has getview()
returns 'renderer'. means can use view helpers need, if in view script.
the new helper this.
use zend\form\elementinterface; class displaysearchform extends abstracthelper { protected $element; // form element render public function __construct(elementinterface $element) { $this->element = $element; } public function __invoke($element = null) { if ($element) { $this->element = $element; } return $this->render($this->element); } public function render(elementinterface $element) { return $this->getview()->form($element); } }
Comments
Post a Comment