2016-07-19 2 views
2

Je suis en train de résoudre

" 'stdout' Champ introuvable dans ..."

et

"Méthode ... pas trouvé dans le tableau"

avertissement en utilisant les notations PhpDocumentor @property et @method sur PhpStorm

enter image description here

j'ai pu résoudre l'avertissement pour stdout en utilisant:

* @property array stdout 

enter image description here

Mais maintenant, comment résolvez-vous le Method 'styles' not found in array Attention? (Voir capture ci-dessus)


je compose ce code pour montrer ce que je suis en train de réaliser:

* @method array $stdout->styles(array $name, array $items) 

Ce projet CakePhp 2 en utilisant commande CakePHP Shell.

stdout->styles est déclaré dans le cadre.

Pour plus de contexte c'est ce que mon code ressemble à:

<? 
class InvoiceShell extends AppShell { 
    public $uses = array('Invoice', 'Request'); 

    public function main() { 

     $this->stdout->styles('success', ['text' => 'green']); 
     $this->stdout->styles('danger', ['text' => 'red']); 
     $this->stdout->styles('bold', ['bold' => true]); 

     . 
     . 
     . 
    } 
} 
+0

1) Qu'est-ce que 'stdout'? 2) Comment c'est déclaré? 3) s'il est utilisé comme 'stdout-> styles' .. alors pourquoi essayez-vous de déclarer stdout' comme tableau (quand c'est clairement un objet ici)? 3) '* @method array $ stdout-> styles (tableau $ name, array $ items)' - complètement faux - vous ne pouvez pas déclarer de sous-propriété/sous-méthode de cette façon - seulement des éléments directs. Cela signifie (en utilisant votre exemple) '* @method array styles (tableau $ name, array $ items)' au mieux (ce qui est encore faux pour votre cas - mais c'est juste pour illustrer la bonne syntaxe). – LazyOne

+0

Jetez un oeil à la syntaxe correcte: https://github.com/phpDocumentor/fig-standards/blob/master/proposed/phpdoc.md – LazyOne

+0

@lazyone Merci d'avoir répondu, j'ai ajouté plus d'informations à la question. 'stdout' et' styles' sont définis dans le framework CakePHP. C'est en dehors de mon contrôle. – Timber

Répondre

1

Vous devez dire PHPDoc/PhpStorm le type correct pour stdout en remplaçant array avec ConsoleOutput dans votre déclaration @property.

/** 
* My cool class is cool. 
* 
* @property ConsoleOutput $stdout 
*/ 

Dans les cas où l'objet est un conteneur générique avec ses propres accesseurs magiques, vous pouvez déclarer une interface uniquement pour la complétion de code par PhpStorm. Il suffit de le déclarer dans un fichier situé dans l'un des dossiers Sources de votre projet.

/** 
* @method mixed styles(string, mixed) 
* @method ... 
*/ 
interface FakeForCodeCompletion { } 

référence ensuite FakeForCodeCompletion (de préférence un nom descriptif) dans votre classe en utilisant @property comme si elle était une vraie classe/interface.