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