2013-11-14 7 views
8

Können Sie mir dabei helfen? Ich bin neu in CodeIgniter und PHPStorm, ich habe ein Problem. Die PHPStorm-IDE zeigt einen Fehler an, obwohl der Code einwandfrei funktioniert (die Persons (Controller) -Klasse kann die (Modell) -Klasse nicht finden).PhpStorm CodeIgniter Klasse nicht gefunden

enter image description here

enter image description here

enter image description here

$data['persons']=$this->**person**->get_person(); = auf dieser Syntax von Persons Klasse gibt es eine Nachricht "Feld person nicht in der Klasse gefunden Persons".

Können Sie mir aufklären, wie dies zu lösen ist, aber eigentlich ist die Ausgabe gut und es ruft die Daten ohne Problem nur eine Warnmeldung in Persons Klasse.

+0

Ist Ihre Modellklasse richtig benannt? CodeIgniter hat Regeln für die Benennung/Umhüllung. Außerdem haben Sie den Konstruktor dort, oder? – minboost

+0

Der Name meiner Modellklasse ist "Person", während mein Controller "Personen" ist. – Echusen

+0

Was versuchen Sie mit diesem '/ * @var \ person $ data * /' zu erreichen? DAs Ich verstehe Sie, was zu erklären "$ data" Variable als eine Instanz der 'Person' Klasse. Oder etwas anderes? – LazyOne

Antwort

-1

Normalerweise fügen die meisten Leute das Suffix '_model' den Klassennamen Model hinzu. Ich schlage vor, dass Sie Ihr Modell mit „Person_model“ nennen Ihr Modell „person_model“ wie folgt umbenennen:

$this->load->model('person_model'); 
$this->person_model->get_person(); 

Ich denke, dass Sie es eine adäquate Lösung finden könnte!

+0

Ich habe versucht, den Namen meiner Modellklasse in "person_model" zu ändern, aber nichts hat sich geändert. – Echusen

+0

Ich denke, das Problem ist auf phpstorm, weil ich die Daten erfolgreich abgerufen habe. – Echusen

+0

Ich denke, das Problem ist Ihre Frage ist nicht klar. Sie fragen nach einem * IDE-Fehler * nicht nach einem tatsächlichen Code-Problem, richtig? Das ist nicht sehr klar. – minboost

15

Die person-Eigenschaft ($this->property) ist nicht explizit deklariert, da sie über die magischen Methoden von PHP erstellt und aufgerufen wird.

PhpStorm hat keine spezielle Unterstützung für CodeIgniter-Framework und kann nicht erraten woher $this->person stammt und welcher Art es ist.

Aber Sie können IDE helfen - nur ein kleiner PHPDoc Kommentar vor der eigentlichen Klasse - mit @property Tag.

/** 
* @property Person $person Optional description 
*/ 
class Persons extends CI_Controller { 

... und oh Magie - es funktioniert: enter image description here

2

Die Antwort von LazyOne zunächst nicht für mich arbeiten. Nach einigen Tests fand ich heraus, dass mein Problem die Groß-/Kleinschreibung der Deklaration der Eigenschaft in PHPDoc war - hoffentlich können die folgenden Beobachtungen anderen helfen. Dies ist, was ich meine Modellklasse deklarieren:

class Custom extends CI_Model {} 

In meinem Controller ich das Modell zum Beispiel laden und verwenden Sie die folgende Art und Weise:

$this->load->model('Custom') 
$table = $this->Custom->get(); 

Jetzt für PhpStorm diese Klasse abholen richtig I ursprünglich hinzugefügt, wie von anderen beschrieben eine PHPDoc @property Kommentar über einem Kern-Klasse (entweder über der CI_Controller Klasse oder getrennte CI_phpStrom.php Datei) wie folgt aus:

* 
* @property Custom $custom 
* 

jedoch diese di dn't das Problem entfernen, da die Variablennamen Groß- und Kleinschreibung wird in diesem Fall, und ich hatte zu schreiben:

* 
* @property Custom $Custom 
* 

für meinen oben Controller-Code korrekt die Klasse zu holen.Eine Alternative wäre, Klein zu verwenden, wenn Aufruf von Funktionen (dies funktioniert auch, wenn Sie Ihre Modell-Deklaration Groß verwendet)

$this->load->model('custom') 
$table = $this->custom->get(); 

Das Komische all diese groß oder klein geschrieben war egal, ob ich meine Modellklasse „Custom_model“ nennen - dann wurde keine Änderung vorgenommen, wenn die PHPDoc-Eigenschaftsvariable auf $ Custom_model oder $ custom_model gesetzt wurde.