php - Zend Framework 2: Create Search Widget for Layout -


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