Phalconのチュートリアル(チュートリアル 1)でコントローラにインジェクションしてみる

Phalconのチュートリアル(チュートリアル 1)」では、コントローラの中でnew Users()していました。

これを外部から注入(依存性の注入)するように変更してみます。

コントローラの変更

プロパティ$userを追加して、それをセットするセッターを追加します。

--- a/app/controllers/SignupController.php
+++ b/app/controllers/SignupController.php
@@ -2,6 +2,13 @@

 class SignupController extends \Phalcon\Mvc\Controller
 {
+    private $user;
+
+    public function setUser(Users $user)
+    {
+        $this->user = $user;
+    }
+
     public function indexAction()
     {

@@ -9,16 +16,14 @@ class SignupController extends \Phalcon\Mvc\Controller

     public function registerAction()
     {
-        $user = new Users();
-
         //Store and check for errors
-        $success = $user->save($this->request->getPost(), array('name', 'email'));
+        $success = $this->user->save($this->request->getPost(), array('name', 'email'));

         if ($success) {
             echo "Thanks for registering!";
         } else {
             echo "Sorry, the following problems were generated: ";
-            foreach ($user->getMessages() as $message) {
+            foreach ($this->user->getMessages() as $message) {
                 echo $message->getMessage(), "<br/>";
             }
         }

Usersオブジェクトの注入

DIコンテナでセッターインジェクションします。

--- a/public/index.php
+++ b/public/index.php
@@ -76,6 +76,18 @@ try {
         return $url;
     });

+    $di->set('SignupController', array(
+        'className' => 'SignupController',
+        'calls' => array(
+            array(
+                'method' => 'setUser',
+                'arguments' => array(
+                    array('type' => 'instance', 'className' => 'Users')
+                )
+            )
+         )
+    ));
+
     //Handle the request
     $application = new \Phalcon\Mvc\Application($di);
     echo $application->handle()->getContent();

これで完成です。

関連

Date: 2014/12/17

Tags: phalcon