2016-07-19 24 views
2

Ich versuche

zu lösen "Feld 'stdout' nicht gefunden ..."

und

"Method ... nicht in Array gefunden"

Warnung mit PHPDocumentor Notationen @property und @method auf PhpStorm

enter image description here

konnte ich die Warnung für stdout lösen mit:

* @property array stdout 

enter image description here

Aber jetzt, wie Sie die Method 'styles' not found in array beheben Warnung? (Siehe Abbildung oben)


ich diesen Code aus zu zeigen, was ich versuche zu erreichen:

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

Dies ist ein CakePHP 2 Projekt CakePHP Command Shell verwenden.

stdout->styles ist im Framework deklariert.

Weiteren Kontext ist es das, was mein Code wie folgt aussieht:

<? 
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) Was ist 'stdout'? 2) Wie es erklärt wird? 3) Wenn es wie 'stdout-> styles' verwendet wird .. warum versuchst du' stdout' als Array zu deklarieren (wenn es hier eindeutig ein Objekt ist)? 3) '* @method array $ stdout-> stile (array $ name, array $ artikel)' - völlig falsch - man kann auf diese Weise keine Untereigenschaft/Untermethode deklarieren - nur direkte Elemente. Dies bedeutet (mit Ihrem Beispiel) '* @method Array-Stile (Array $ Name, Array $ Elemente)' bestenfalls (was immer noch falsch für Ihren Fall ist - aber das ist nur um die richtige Syntax zu veranschaulichen). – LazyOne

+0

Werfen Sie einen Blick auf die korrekte Syntax: https://github.com/phpDocumentor/fig-standards/blob/master/proposed/phpdoc.md – LazyOne

+0

@lazyone Danke für die Antwort, ich habe weitere Informationen zu der Frage hinzugefügt. 'stdout' und' styles' sind im CakePHP-Framework definiert. Es liegt außerhalb meiner Kontrolle. – Timber

Antwort

1

Sie benötigen PHPDoc/PhpStorm die richtige Art zu sagen, für stdout von array mit ConsoleOutput in Ihrer @property Erklärung zu ersetzen.

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

In Fällen, in denen das Objekt mit seinem eigenen Magie Accessoren ein generischer Container ist, können Sie eine Schnittstelle nur für Code-Vervollständigung von PhpStorm erklären. Deklarieren Sie es einfach in einer Datei, die sich in einem der Sources-Ordner für Ihr Projekt befindet.

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

Referenz Dann FakeForCodeCompletion (vorzugsweise einen beschreibenden Namen) in der Klasse mit @property, als ob es sich um eine echte Klasse/Interface waren.