美文网首页
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#基本功能#控制器

    Phalcon 中控制器统一以 Controller 结尾,方法以 Action 结尾,如:TestControl...

  • Phalcon#基本功能#路由

    Phalcon\Mvc\Router 提供了高级路由支持,在 MVC 模式下可以自定义路由映射到指定的控制器和动作...

  • Phalcon#基本功能#请求

    请求的实例生成自 Phalcon\Http\Request,查看 API 获取更多的信息。 获取请求的实例 新建一...

  • Phalcon#基本功能#视图

    视图层负责把数据展示给浏览器或其他工具,Phalcon 中通过 Phalcon\Mvc\View 来管理视图层。控...

  • Phalcon#基本功能#响应

    响应的实例生成自 Phalcon\Http\Response,查看 API 获取更多信息。 取得响应的实例: 响应...

  • Phalcon#基本功能#模板引擎

    PHP 本身就是个模板引擎, 所以没必要再使用其他引擎,使用其它模板引擎还需要额外解析,造成性能浪费。所以推荐直接...

  • Chapter6输入输出系统

    I/O系统管理I/O设备和相应的设备控制器,完成用户提出的I/O请求 I/O系统的基本功能1.隐藏物理设备的细节不...

  • 1.计算机的组成部分及功能

    由运算器,控制器,存储器,输入装置和输出装置五大部件组成计算机,每一部件分别按要求执行特定的基本功能。 比如:(1...

  • Phalcon#前言#搭建简单应用

    安装完 Phalcon 后,接下来就是如何搭建自己的应用了。这里介绍下最简单的应用搭建。 一、单一模块简单应用 首...

  • Phalcon#前言#安装及配置

    这里简单介绍下 Linux 下 Phalcon 的安装及配置,更多内容请查看官网安装介绍 Installation...

网友评论

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

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