2016-07-08 14 views
1

Ich bin mit 3 Slim ein Rest-API zu bauen, und ich habe diese Strukturwie auf Abhängigkeitscontainer von separaten Klasse in Slim 3 zugreifen?

# models/user.php 

<?php 
class User { 

    public $id; 
    public $username; 
    public $password; 
    public $number; 
    public $avatar; 

    function __construct($id, $username, $password, $number, $avatar = null, $active = false) { 

     $this -> id = $id; 
     $this -> username = $username; 
     $this -> password = $password; 
     $this -> number = $number; 
     $this -> avatar = $avatar; 
     $this -> active = $active; 

    } 

    static function getByUsername($username) { 

     // i want to access the container right here 

    } 

} 

?> 

ich kann das Benutzermodell in Abhängigkeit Containern speichern, weil ich nicht mehr Konstruktoren in PHP haben kann, und ich kann Zugriff auf statische Methoden von der Klasseninstanz? Wie kann ich auf den Container von einem Dienst aus zugreifen, der nicht im Abhängigkeitscontainer gespeichert werden kann?

Antwort

0

Sie können die Container zugreifen, indem sie einfach als Argument an User::getByUsername vorbei, wie folgt aus:

$ app-> get ('/ find-user-by-Benutzername/{$ username}', function ($ request, $ response, $ args) { $ result = \ Benutzer :: getByUsername ($ args ['Benutzername'], $ this-> getContainer()); });

Sie sollten jedoch die Architektur Ihrer Anwendung ändern. Container ist das Ding, aus dem man Zeug nimmt, man injiziert es nicht, weil eine solche Injektion den eigentlichen Zweck des Containers beseitigt.

Unter der Annahme, dass Sie Benutzerinstanz von Speicher greifen wollen, wie Datenbank, können Sie es wie folgt tun:

// application level 
$app->get('/find-user-by-username/{$username}', function($request, $response, $args) { 
    // assuming you're using PDO to interact with DB, 
    // you get it from the container 
    $pdoInstance = $this->container()->get('pdo'); 
    // and inject in the method 
    $result = \User::getByUsername($args['username'], $pdoInstance); 
}); 

// business logic level 
class User 
{ 
    public static function getByUsername($username, $dbInstance) 
    { 
     $statement = $dbInstance->query('...'); 
     // fetching result of the statement 
    } 
}