2016-06-08 8 views
1

Ich verwende derzeit CakePHP 3's ORM in einem Slim Framework 3 Projekt.TableRegistry kann keine Tabelle finden (Namespace-Problem?)

Ich habe die Namenskonventionen von CakePHP für meine Namespaces und Klassen verwendet. Ich versuche, meine Benutzer durch Zugriff auf die Tabelle des Benutzers (Speicherort: App \ Model \ Table \ UsersTable.php) zu erhalten.

In meinem Controller (App \ Controllers \ UsersController.php), wenn ich versuche:

$usersTable = TableRegistry::get('Users'); // NOT working 
$usersTable = TableRegistry::get('Users', ['className' => \App\Model\Table\UsersTable::class]); // working 

Ich muss speziell mein classname gesetzt (was schrecklich ist, weil ich in jeder dies tun müssen, Controller und Tabelle (für Assoziationen) Klassen). Ich verstehe nicht, was ich falsch gemacht habe und warum CakePHP diese Klassen nicht abrufen kann.

Mein composer.json ist wie folgt:

{ 
    "require": { 
     "slim/slim": "^3.0", 
     "cakephp/orm": "^3.2", 
     "cakephp/validation": "^3.2", 
     "cakephp/i18n": "^3.2", 
    }, 
    "autoload": { 
     "psr-4": { 
      "App\\": "src" 
     } 
    } 
} 

Dateien Mein Projekt unter src/ befinden (zum Beispiel Tabelle ist der Benutzer in src/Model/Table).

Hat jemand eine Idee, wie ich das beheben konnte und direkt TableRegistry::get('Users'); verwenden und gezwungen werden, den Klassennamen hinzuzufügen?

Antwort

0

Das passiert, wenn nicht standardmäßige Namespaces verwendet werden und/oder die Base-Namespace-Option (richtig) nicht konfiguriert wird, dh App.namespace.

Short classname Auflösung muss über die mögliche Basis Namespace wissen, sonst ist es unmöglich, die richtigen vollständig qualifizierten Namen zu bauen, dh Sie CakePHP über App

\Cake\Core\Configure::write('App.namespace', 'App'); 

Ohne diese Information sagen muss, würde der kurze Klassenname nur Auflösen zu Model\Table\UsersTable.

+0

Dank, habe ich in diesem Teil der Dokumentation einen Blick nicht nehmen. Funktioniert jetzt gut! – kinkaz

Verwandte Themen