Zend Framework 2:为布局创建搜索小部件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zend Framework 2:为布局创建搜索小部件相关的知识,希望对你有一定的参考价值。

我有一个小型的私人项目来学习ZF2。我已经将Zend Lucene集成为Search Function。这很好用,但是我现在想在我的布局中集成一个搜索字段,以便在所有页面上都可用。我真的不确定如何实现这一目标。首先,我是否正确通过View Helper完成此操作?如您在下面看到的,我不知道要输入__invoke()来输入我的助手的Search Form是什么。我的方法总体上是正确的还是有更好的方法?我想要一个好的ZF2解决方案,有人可以给我一些建议吗?预先非常感谢。

好的,到目前为止我做了什么:

1。我创建了一个表单:

namespace AdvertForm;
use ZendFormForm;

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 AdvertViewHelper;
use ZendViewHelperAbstractHelper;
use ZendFormElementInterface;

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 AdvertViewHelper;
use ZendServiceManagerFactoryInterface;
use ZendServiceManagerServiceLocatorInterface;

class DisplaySearchFormFactory implements FactoryInterface
{
    public function createService(ServiceLocatorInterface $serviceLocator) {
        $realServiceLocator = $serviceLocator->getServiceLocator();
        $form = $realServiceLocator->get('FormElementManager')->get('AdvertFormSearchForm');
        $helper = new DisplaySearchForm($form);
        return $helper;
    } 
}

4。我在模块中注册了工厂。php

public function getViewHelperConfig()
{
    return array(
        'factories' => array(
           'displaySearchForm' => 'AdvertViewHelperDisplaySearchForm',
         )
    )
 }

5。在我的布局layout.phtml

<?php echo $this->displaySearchForm(); ?> 

我有一个小型的私人项目来学习ZF2。我已经将Zend Lucene集成为搜索功能。效果很好,但是我现在想在我的布局中集成一个搜索字段,以便可以在...

答案

AbstractHelper具有返回“渲染器”的getView()。这意味着您可以使用所需的所有视图助手,就像在视图脚本中一样。

以上是关于Zend Framework 2:为布局创建搜索小部件的主要内容,如果未能解决你的问题,请参考以下文章

Zend Framework提交2个表单,1个提交[关闭]

PHP 在Zend Framework中禁用视图和布局

PHP Zend Framework:禁用布局和视图 - 用于AJAX

禁用Zend Framework中的视图和布局

在 Zend Framework 布局脚本中使用 Dojo BorderContainer

在 Zend Framework 2 中使用 Zend_Mail + Zend_Mime 创建 HTML 电子邮件