2016-05-26 14 views
0

Disclosure: Dies ist meine erste dünne AppSchlanke 3 Eloquent Initialisierungsfehlers

Ich habe versucht Eloquent mit Slim 3, zu verwenden, aber ich kann es Arbeit zu kommen scheinen. Ich habe alles mit Composer installiert, gefolgt von der Installationsanleitung auf der Site.

Wenn ich versuche, meinen User-Modell zu verwenden (Wich erweitert das Eloquent Modell) erhalte ich einen fatalen Fehler: Fatal error: Call auf eine Elementfunktion Anschluss() auf null in **** \ Anbietern \ belichten \ Datenbank \ Eloquent \ Model.php on line 3280

Mein appconfig sieht wie folgt aus:

$config['db'] = [ 
    'driver' => 'mysql', 
    'host'  => '****', 
    'database' => '****', 
    'username' => '****', 
    'password' => '****', 
    'charset' => 'utf8', 
    'collation' => 'utf8_unicode_ci', 
    'prefix' => '', 
]; 

, die ich an die App übergeben entsprechend der Dokumentation:

$app = new \Slim\App(["settings" => $config]); 
$container = $app->getContainer(); 
$container['db'] = function (ContainerInterface $container) { 
    $settings = $container->get('database'); 
    $capsule = new \Illuminate\Database\Capsule\Manager; 
    $capsule->addConnection($settings); 
    $capsule->setAsGlobal(); 
    $capsule->bootEloquent(); 

    return $capsule; 
}; 

Mein sieht User-Klasse wie folgt aus:

class User extends Illuminate\Database\Eloquent\Model {}

Ich habe eine Abhilfe auf Stackoverflow wie so gefunden:

Verwendung Illuminate \ Database \ Eloquent \ Modell als Eloquent; verwenden Illuminate \ Database \ Capsule \ Manager;

class User extends Eloquent { 
     public function __construct(Manager $capsule, array $attributes = []) 
    { 
     parent::__construct($attributes); 
    } 
} 

Aber wenn ich den Konstruktor überschreiben, nach dem Port i einen anderen Fehler:

_Catchable fataler Fehler: Argument 1 bestanden Up \ models \ User :: __ construct() muss eine Instanz sein, Illuminate \ Database \ Capsule \ Manager, keine Angabe, in **** \ vendor \ illuminate \ database \ Eloquent \ Model.php in Zeile 644 aufgerufen und in **** \ models \ User.php in Zeile 14_

definiert

Ich bin jetzt fest. Bitte helfen

+0

'$ Kapsel-> addConnection ($ container-> get ('Datenbank'));'! = '$ Kapsel-> addConnection ($ config ['db']);' – danopz

Antwort

1

Ich habe eine Lösung here gefunden, aber es scheint ein wenig fehl am Platz. Ich hatte gerade Eloquent init separetly wie so:

$capsule = new Capsule; 
$capsule->addConnection($config['db']); 
$capsule->setEventDispatcher(new Dispatcher(new Container)); 
$capsule->bootEloquent(); 

auf diese Weise die $container['db'] = function() {} Teil ausgeschlossen ist, aber jetzt ist alles funktioniert

EDIT (für Kommentare): der ganze Teil sieht nun wie folgt aus:

$app = new \Slim\App(["settings" => $config]); 
$container = $app->getContainer(); 
/*$container['db'] = function (ContainerInterface $container) { 
    $settings = $container->get('database'); 
    $capsule = new \Illuminate\Database\Capsule\Manager; 
    $capsule->addConnection($settings); 
    $capsule->setAsGlobal(); 
    $capsule->bootEloquent(); 

    return $capsule; 
};*/ 

$capsule = new Capsule; 
$capsule->addConnection($config['db']); 
$capsule->setEventDispatcher(new Dispatcher(new Container)); 
$capsule->bootEloquent(); 
+1

Das Problem ist, dass nur der Container Führt den Code in der Funktion aus, wenn er jemals aufgerufen wird .... Also, wenn Sie ein Modell haben, und nichts ruft d eloquent wird nie gestartet :) – geggleto

+0

Hat nicht bekommen, was Sie sagen mit "musste into eloquent separetly", können Sie weitere Details PLZ hinzufügen? –

+0

@ Biguá Ich habe gerade;) – zedling