2016-05-24 2 views
1

Вопрос о phpDocs и описании параметра массива. Например у меня есть код, как этотPhp documenting array param

<?= $view['form']->getElement('number_of_doors_id'); ?> 

И PhpStorm не понимает, что ключ «форма» есть.

Я попытался

/** 
* @var $view['form'] \\Framework\Templating\Helper\FormHelper 
*/ 

/** 
* @params $view['form'] \\Framework\Templating\Helper\FormHelper 
*/ 
+1

Посмотрите [\ [здесь \]] (HTTP: // StackOverflow .com/вопросы/34703744/пост-метод-это-не обходя--ценность-While-GET-метод-работа-отлично). phpStorm является проблематичным. – sjsam

ответ

0

Модифицированный @Robert ответ и так lved этой проблема, как этого

<?php 
    /** 
    * @var $view \Framework\Templating\Helper\FormHelper[] 
    */ 
?> 

И если вам нужны два различных типа вобще

/** 
* @var $view \Framework\Templating\Helper\FormHelper[]|\Framework\Templating\Helper\TranslatorHelper[] 
*/ 

и так далее

+0

но это не сработает, потому что он говорит, что самый ключ в массиве $ view - это тип FormHelper. – Robert

+0

Обновлен мой ответ, теперь отлично работает – MyMomSaysIamSpecial

1

Единственное решение, которое приходит на ум, чтобы использовать несколько типа для массива, как это:

/** 
* @var (\Framework\Templating\Helper\FormHelper|int)[] $view 
*/ 

Где ИНТ другой тип для массива ключевых

От PHPDOC:

, содержащий несколько типов, определение типа информирует читателя типа каждого элемента массива. Каждый элемент может быть любого типа данных типов. Пример: @return (int | string) []

Другой вариант - назначить эту переменную массива нормальной переменной.

Я думаю, что другой возможности пока нет.

1

В подобной ситуации я в конечном итоге извлечение переменных из массива и имеющие индивидуальные @var блоков:

/** 
* @var \Framework\Templating\Helper\FormHelper $form 
* @var \Framework\Templating\Helper\UrlHelper $url 
*/ 

extract($view); 
$form->getElement('number_of_doors_id'); 

Альтернативного я видел оказываю класс «ViewModel» за просмотр:

class AboutViewModel 
{ 
    /** 
    * @var \Framework\Templating\Helper\FormHelper $form 
    * @var \Framework\Templating\Helper\UrlHelper $url 
    */ 
    public $form, 
      $url; 

} 

и на ваш взгляд

/** 
* @var \Framework\Views\AboutViewModel $vm 
*/ 
$vm->form->getElement('number_of_doors_id'); 
+0

Хорошая идея, печально извлечение требует массива для работы, а с ** (массив) $ vew ** не работает хорошо. – MyMomSaysIamSpecial

+1

О, я думал, что '$ view' был массивом. Какой тип? Какой-то сборник? – Steve

+0

Да, это компонент PhpEngine для компонентов Templating. http://symfony.com/doc/current/components/templating/introduction.html – MyMomSaysIamSpecial