2010-09-15 3 views
0

При создании элементов формы с помощью Zend (с использованием Zend Studio для Eclipse) мне бы хотелось получить автоматическое завершение или подсказки. Вот что я думаю. Я уверен, что они существуют, но я не знаю, как их получить.Автоматическое завершение для элементов формы Zend

  • I типа createElement и автозаполнение дает мне подпись createElement($type, $name). Отлично, я выбираю его.

  • но когда я пытаюсь установить $type У меня нет никаких подсказок вроде DateTextBox или ValidationTextBox. Будучи новым, я вижу, как это может быть полезно. Что вы делаете, чтобы запомнить все варианты?

  • для array атрибутов, как require, invalidMessage, я хотел бы получить список тех, на выбор, и/или автоматическое завершение, когда я начинаю вводить один.

    // Date field

    $date = $this->createElement('DateTextBox', 'date',

    array('require' => 'true', 'invalidMessage' => 'Invalid date format')

    );

    $date->setLabel('date')->setRequired(true);

ответ

1

У вас есть несколько вариантов, чтобы помочь себе, не дожидаясь каких-либо плагинов:

  • узнать его и запомнить;)
  • расширить свои PHPDoc блоки со всеми доступными опциями:

Пример (честно говоря, я не знаю, поддерживает ли Eclipse html в phpDoc или даже любой текст после имени переменной в @param, но он отлично работает в Netbeans):

/** 
* [...] 
* @param string $type Can be: <ul><li>DateTextBox</li><li>ValidationTextBox</li></ul> 
* @param string $name Whatever 
* @param array|Zend_Config $options Array with following keys: <ul><li>require</li><li>invalidMessage</li></ul> 
* @return Zend_Form_Element 
*/ 
public function createElement($type, $name, $options = null) 
  • расширить класс Zend и создавать свои собственные методы, чтобы упростить вашу работу

Пример:

class My_Zend_Form_Element extends Zend_Form_Element  
{ 
    public function createDateTextBox($name, $options = null) 
    { 
     return $this->createElement('DateTextBox', $name, $options); 
    } 
} 
  • объявить некоторые хорошо именованные константы и обеспечивают некоторый намек на PHPDoc

Пример: (ZFE_OPTIONS типа и IDE должны показать всплывающую подсказку с некоторыми константами, чтобы использовать в качестве ключей массива)

/** 
* Can be true or false 
*/ 
define('ZFE_OPTIONS_REQUIRE','require'); 
  • создавать свои собственные вспомогательные классы с методами для получения допустимых вариантов массива

Пример:

class ZFE_Options 
{ 
    protected $opts = array(); 

    /** 
    * @param bool $req 
    * @return ZFE_Options 
    */ 
    public function setRequired($req){ 
     $this->opts['require'] = (bool)$req; 
     return $this; 
    } 

    /** 
    * @param string $txt 
    * @return ZFE_Options 
    */ 
    public function setInvalidMessage($txt){ 
     $this->opts['invalidMessage'] = (string)$txt; 
     return $this; 
    } 

    /** 
    * @return array 
    */ 
    public function toArray(){ 
     return $this->opts; 
    } 
} 

$zfe_options = new ZFE_Options(); 
$opts = $zfe_options 
      ->setRequired(true) 
      ->setInvalidMessage('Please provide valid email address') 
      ->toArray(); 
+0

Перезаписывание DocBlocks ZF бессмысленно, потому что вы будете терять изменения каждый раз, когда вы обновляете библиотеку. Остальная часть кажется мне вздутой, особенно постоянный подход. – Gordon

+1

При обновлении библиотеки, это возможность изменения параметров функции, поэтому естественно соблюдать осторожность при использовании новых версий;). Мне также не нравятся константы, но они имеют два основных преимущества: доступны везде и могут быть автозаполнены. http://www.php.net/manual/en/function.curl-setopt.php вдохновили меня использовать их так –

1

Это невозможно. Это не так, как работает автозаполнение. Подсказки, которые вы получаете, берутся непосредственно из документации кода ZF. Ни больше ни меньше. Все, что вы видите как подсказки, берется непосредственно из подписи DocBlock и метода, например.

/** 
    * Create an element 
    * 
    * Acts as a factory for creating elements. Elements created with this 
    * method will not be attached to the form, but will contain element 
    * settings as specified in the form object (including plugin loader 
    * prefix paths, default decorators, etc.). 
    * 
    * @param string $type 
    * @param string $name 
    * @param array|Zend_Config $options 
    * @return Zend_Form_Element 
    */ 
    public function createElement($type, $name, $options = null) 

Eclipse, может сказать вам, чтобы вставить строку или массив, и он будет знать, что метод возвращает Zend_Form_Element, но он не может сказать вам, что эти строки должны быть.

Единственное место, где я знаю что-то вроде того, что вы описали, есть для файлов CSS. По какой-то причине, когда я набираю display:, он предоставит мне поле автозаполнения с возможными значениями для этого объявления. Если вы хотите более сложную автозаполнение, как это, подумайте о том, чтобы подать это как запрос функции Zend.

+0

@jblue Я не знаю, как это тяжело. – Gordon

+0

@jblue вам нужно зайти на Zend.com. Если ваша подписка на поддержку по-прежнему действительна, вы можете открыть билет. В противном случае вы просто спрашиваете на своем форуме где-нибудь. – Gordon

Смежные вопросы