美文网首页
Phalcon#基本功能#控制器

Phalcon#基本功能#控制器

作者: 野尘lxw | 来源:发表于2016-09-16 23:18 被阅读0次

    Phalcon 中控制器统一以 Controller 结尾,方法以 Action 结尾,如:TestController::indexAction,所有控制器都应该继承自Phalcon\Mvc\Controller

    初始化控制器

    Phalcon\Mvc\Controller 提供了初始化函数 initialize,它会最先执行,官方不推荐使用 __construct(源码中 __construct 定义了 final 属性)。 initialize 仅会在事件 beforeExecuteRoute 成功执行后被调用。

    <?php
     
    use Phalcon\Mvc\Controller;
     
    class TestController extends Controller
    {
          
        public function initalize()
        {
             // do something first ...
        }
    }
    

    查看 Phalcon\Mvc\Controller 类源码会发现,也可以实现 onConstruct 函数来使控制器对象创建后执行一些初始化逻辑。

    <?php
    
    /**
     * Phalcon\Mvc\Controller 类
     */ 
    abstract class Controller extends Injectable implements ControllerInterface
    {
        /**
         * Phalcon\Mvc\Controller constructor
         */
        public final function __construct()
        {
            if method_exists(this, "onConstruct")  {
                this->{"onConstruct"}();
            }    
        }
    }
    

    通过 onConstruct 函数实现初始化控制器:

    <?php
     
    use Phalcon\Mvc\Controller;
     
    class TestController extends Controller
    {
        public function onConstruct()
        {
            // do something first ...
        }
    }
    
    获取参数

    URL 路由中的参数可以通过方法中直接传入获取:

    <?php
     
    use Phalcon\Mvc\Controller;
     
    class TestController extends Controller
    {
        public function indexAction($param1, $param2 = 'default value')
        {
               
        }
    }
    

    通过派遣器 Dispatcher 获取参数:

    <?php
     
    use Phalcon\Mvc\Controller;
     
    class TestController extends Controller
    {
          
        public function indexAction()
        {
            $param1 = $this->dispatcher->getParam('param1');     // 获取参数param1
            $param2 = $this->dispatcher->getParam('param2');     // 获取参数param2
        }
    }
    

    通过请求 Request 对象获取参数:

    <?php
     
    use Phalcon\Mvc\Controller;
     
    classs TestController extends Controller
    {
          
        public function indexAction()
        {
            $name= $this->request->getPost('name');     // 获取post参数name
            $age = $this->request->getQuery('age');     // 获取get参数age
        }
    }
    
    在控制器中使用 DI 中注入的服务

    Phalcon\Mvc\Controller 继承的 injectable 类中封装了获取 DI 的方法,所有在控制器中可以方便的获取 DI 中注入的各种服务。

    <?php
     
    use Phalcon\Mvc\Controller;
     
    class TestController extends Controller
    {
        public function indexAction()
        {
            $this->getDI()->get('service name');
            $this->di->get('service name'); // 或者
        }
    }
    
    绑定事件

    控制器会自动作为 dispatcher 事件的侦听者,使用这些事件并实现这些方法后,便可以实现对应被执行的 actionbefore/after 钩子函数。

    <?php
     
    use Phalcon\Mvc\Controller;
     
    class TestController extends Controller
    {
        public function beforeExecuteRoute($dispatcher)
        {
            // 在所有action之前执行
            if ($dispatcher->getActionName() == 'save') {
                // do something before save action ...
            }
        }
          
        public function afterExecuteRoute($dispatcher)
        {
            // 找到的action之后执行
        }
    }
    
    请求与响应

    在控制器中可以直接获取请求和响应对象:

    <?php
     
    use Phalcon\Mvc\Controller;
     
    class TestController extends Controller
    {
        public function indexAction()
        {
            $request = $this->request; // 获取请求对象
            $params = $request->getPost(); // 获取post提交参数
               
            $response = $this->response; // 获取响应对象
            $response->setJsonContent(['a' => 11111, 'b' => 2222])->send(); // 输出json字符串
        }
    }
    

    相关文章

      网友评论

          本文标题:Phalcon#基本功能#控制器

          本文链接:https://www.haomeiwen.com/subject/mpmiettx.html