phalcon-入门篇6(控制器)

2024-05-31 07:32
文章标签 控制器 入门篇 phalcon

本文主要是介绍phalcon-入门篇6(控制器),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

phalcon-入门篇6(控制器)

本教程基于phalcon2.0.9版本

前言

先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台

废话不多说今天我们就开门见山的来讲一讲phalcon的控制器,控制器是MVC中的C层,也是业务逻辑处理相当重要的一个环节,它衔接了数据处理以及界面展示,phalcon的控制器为我们提供了非常丰富的函数方法,那么今天就来初步了解一下phalcon控制器的一系列基本使用知识!

注:笔者水平有限,说的不正确的地方希望大家多多指正,一同交流技术

附上:

喵了个咪的博客:http://w-blog.cn

教程代码库:http://git.oschina.net/wenzhenxi/Phalcon-tutorial

phalcon官网地址:https://phalconphp.com

phalcon中文社区:http://www.iphalcon.cn/

1. 参数,转发,依赖注入

说道控制器只要是使用过任何一个MVC框架的童鞋都不会陌生,控制器是处理业务逻辑的地方使用也是非常广泛的,在之前的教程Helloword里面我们简单的使用控制器打印了一段话,接下来简单来看看phalcon控制器为我们带来的其他有意思的功能,我们先做准备工作我们先建立一个名为ControllerController的控制器文件如下:

use Phalcon\Mvc\Controller;// 控制器类 必须继承Controller
class ControllerController extends Controller {
}

1.1 参数

说道参数有人会问题了,上一篇不是讲了怎么获取请求参数吗?这里的参数是什么呢?

其实这里讲的参数是phalcon提供的一种特殊获取请求参数的方式我们在ControllerController中建立indexAction方法如下:

public function indexAction($Username, $Passwd, $email = 'test@test.com') {echo $Username . '</br>';echo $Passwd . '</br>';echo $email;echo '<h1>Controller/index!</h1>';
}

大家可以看到这个Action需要三个参数,这三个参数那里来呢?我们试着访问一下如下连接:

http://phalcon.w-blog.cn/phalcon/Controller/index/phalcon/passphalcon

结果如下:

机制的童鞋一定已经看懂了规则是这样的:

直接匹配http://地址/模块名/方法名/参数1/参数2为第一个和第二个变量,第三个为默认值演示

注意:当请求是没有传递参数1和参数2则会引起报错

1.2 转发

说道转发可能有这样一个场景,一个管理员用户请求了过来但是这个用户并没有使用这个业务的权限,我们需要让用户看到无权限提示,其实在前面介绍返回的时候已经可以使用返回的重定向跳转到无权限提示页面,或者可以使用如下方式:

public function index2Action() {$this->flash->error("当前用户尚无访问权限!");// 跳转到指定的控制器和方法$this->dispatcher->forward(array("controller" => "Controller","action"     => "index"));echo '<h1>Controller/index2!</h1>';
}

大家试着访问一下如下地址:

http://phalcon.w-blog.cn/phalcon/Controller/index2/phalcon/passphalcon

结果如下:

大家会发现几个问题:

  1. 请求地址并没有改变,并不是跳转而是在原有index2Action执行了indexAction的内容
  2. 在转发之后剩下的语句也被执行了echo
  3. 请求中index2之后带有phalcon/passphalcon两个参数

注意1:通过转发之后本方法内的代码依然会被执行建议在转发之后直接return不然后面的代码会继续执行

注意2:当转发到indexAction需要传递参数1和参数2的方法如果index2访问的时候没有传递参数1和参数2则会引起转发之后的报错

1.3 依赖注入

在之前我们并没有介绍过依赖注入,但是我们确确实实已经开始使用了,在index.php中我们做了两件事情:

// 创建一个DI实例
$di = new FactoryDefault();//初始化session
$di->setShared('session', function () {$session = new Session();$session->start();return $session;
});

DI就是我们所说的依赖注入,但是在这里并不打算仔细讲解会在后续教程单独开放一个章节来细细讲解

大家可以看到我们已经在di实例中注册了session也在index.php中体验过了但是我们怎么在控制器中去使用session呢我们看如下方法:

public function index3Action() {$this->session->set('phalcon', 'test');                            // 以和服务相同名字的类属性访问echo $this->di->getsession()->get('phalcon') . '</br>';            // 另一种方式:使用魔法getter来访问echo $this->di->get('session')->get('phalcon') . '</br>';          // 通过DI访问服务echo $this->di['session']->get('phalcon') . '</br>';               // 使用数组下标echo $this->getDI()->getsession()->get('phalcon') . '</br>';       // 通过getDI方法获取实例echo '<h1>Controller/index3!</h1>';
}

结果就是打印了4个test,通过以上这么多种方式我们都可以获得DI实例并且从DI实例里面取出我们想要使用的资源

2. 流程函数,钩子函数

在很多特定的时候我们需要验证权限啊或者是在返回的时候进行特殊的处理,我们当然不会在每一个控制器的方法中反复的重写,普遍的做法是写一个公用的方法然后大家都去请求它完成相应的操作,phalcon也提供很很多意义上的流程函数和钩子函数,来方便我们做不同的处理

2.1 流程函数

流程函数有两个一个是onConstruct一个是initialize我们先来看一下官方的解释

onConstruct:紧接着创建控制器对象的后面执行一些初始化的逻辑

initialize:初始化的函数,它会最先执行,并优于任何控制器的其他action。

注意:即使待执行的action在控制器不存在“onConstruct”都会被执行。

我们加入如下代码以便使用:

public function onConstruct() {echo '<h1>onConstruct!</h1>';
}public function initialize() {echo '<h1>initialize!</h1>';
}

2.2 钩子函数

钩子函数顾名思义,就是在程序执行前后对程序可以执行处理,phalcon中提供两个函数beforeExecuteRouteafterExecuteRoute一样我们先看下官方解释

beforeExecuteRoute:钩子函数在控制器被找到之前执行优先级高于initialize

afterExecuteRoute:钩子函数在控制器执行完之后执行

我们加入如下代码以便使用:

public function beforeExecuteRoute($dispatcher) {echo '<h1>beforeExecuteRoute!</h1>';
}public function afterExecuteRoute($dispatcher) {echo '<h1>afterExecuteRoute!</h1>';
}

2.3 优先级

在上面我们对流程函数,钩子函数都进行了建立,并且都有输出我们来请求一下看看他们执行的优先级

http://phalcon.w-blog.cn/phalcon/Controller/index/phalcon/passphalcon

如下:

3. 小结

今天教程讲的phalcon控制器的两块内容仅仅只是冰山一角,大家如果有使用phalcon-tools可以查看一下\Phalcon\Di\Injectable中通过$this可以获取34种实例以供使用,可以见得phalcon确实下了很多功夫,那么今天的教程就到这里了,也希望大家能多多尝试不要偷懒哦!

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

Phalcon技术交流:364520707 PhalCon中文社区:287484785 欢迎大家的加入!

这篇关于phalcon-入门篇6(控制器)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1017568

相关文章

Spring Boot 入门篇

一、简介 Spring Boot是一款开源的Java Web应用框架,旨在简化Spring应用的初始搭建以及开发过程。它整合了Spring技术栈中的诸多关键组件,为开发者提供了一种快速、简便的Spring应用开发方式。Spring Boot遵循“约定优于配置”的原则,通过自动配置、起步依赖和内置的Servlet容器,极大地简化了传统Spring应用的配置和部署过程。 二、Spring Boot

(入门篇)JavaScript 网页设计案例浅析-简单的交互式图片轮播

网页设计已经成为了每个前端开发者的必备技能,而 JavaScript 作为前端三大基础之一,更是为网页赋予了互动性和动态效果。本篇文章将通过一个简单的 JavaScript 案例,带你了解网页设计中的一些常见技巧和技术原理。今天就说一说一个常见的图片轮播效果。相信大家在各类电商网站、个人博客或者展示页面中,都看到过这种轮播图。它的核心功能是展示多张图片,并且用户可以通过点击按钮,左右切换图片。

第49课 Scratch入门篇:骇客任务背景特效

骇客任务背景特效 故事背景:   骇客帝国特色背景在黑色中慢慢滚动着! 程序原理:  1 、 角色的设计技巧  2 、克隆体的应用及特效的使用 开始编程   1、使用 黑色的背景: ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7d74c872f06b4d9fbc88aecee634b074.png#pic_center)   2

jmeter之仅一次控制器

仅一次控制器作用: 不管线程组设置多少次循环,它下面的组件都只会执行一次 Tips:很多情况下需要登录才能访问其他接口,比如:商品列表、添加商品到购物车、购物车列表等,在多场景下,登录只需要1次,我们期望的是重复执行登陆后面的接口来做压测,这就和事务相关,例如 事务1: 登录—>添加购物车 事务2: 登录—>购物车列表 事务3: 登录—>商品列表—>添加购物车 … 一、仅一次控制器案例 在

为控制器的方法添加必要参数

前言:做这个系统时,要求每次调用接口时要传操作人、操作人电脑ip、菜单id,然后计入log。本来前端读取到然后加入请求头,后端写入log即可。但是老大要求后端也要把控必传参数,避免前端忘记。所以就写了这个。IOperationFilter 这个是百度知道的。主要用于在Swagger生成的API文档中动态地添加或修改操作(即API接口)的元数据。 用处:可以自动地为 Swagger/OpenAPI

【轻松上手postman】入门篇:如果根据接口文档写postman接口用例

在我们平时的测试工作中除了最基本的网页测试外,也会遇到没有页面但需要验证内部逻辑正确性的接口测试任务,在遇到没有网页的测试任务时,我们就要使用到接口测试工具来模拟对程序代码触发。 在接到接口测试任务时,一般都会拿到接口需求文档,没接触过接口测试的人看到接口文档正常反应一脸闷🤣不知如何下手怎么开始测试😓,下面我就来讲讲如何将接口文档上的一个个接口转换成postman用例 首先需要安装

入门篇:神奇的Annotation

涅槃1992 关注 2016.12.25 23:41* 字数 4964 阅读 1059评论 3喜欢 29 前面写了Android 开发:由模块化到组件化(一),很多小伙伴来问怎么没有Demo啊?之所以没有立刻放demo的原因在还有许多技术点没说完. 今天我们就来细细评味Java当中Annotation,也就是我们常说的注解. 本文按照以下顺序进行:元数据->元注解->运行时注解->编译时

IBM Storwize V7000存储控制器故障节点报错574

背景:由于客户机房搬迁,需要下电迁移设备。该存储自2016年投入生产使用后,从未关过机,已正常运行七八年时间,期间只更换过硬盘,无其他硬件故障。 在GUI界面点击关闭系统后,大概等了40分钟,存储仍未关机,所有硬盘状态灯绿色常亮,面板无报错。到设备后面看控制器的状态,发现node2已经正常关机了,node1仍然在运行,又等了大概20分钟还没有关机,直接将电源线给拔掉了。 再次上电以后,发现

springboot+dubbo+zk 入门篇(windows单机版)

一、下载安装zk注册中心并启动:     官网地址:http://www.apache.org/dyn/closer.cgi/zookeeper/     我的是zookeeper-3.3.6版本的。下载之后需要修改下文件:进入zk的conf目录。复制下zoo_sample.cfg     这个文件并重命名为zoo.cfg,然后把修改该文件内容,下面是我的,这个只是单机配置: # 心跳时间间隔

s3c2440---中断控制器

一、概述 S3C2440A 中的中断控制器接受来自 60 个中断源的请求。提供这些中断源的是内部外设,如 DMA 控制器、 UART、IIC 等等。 在这些中断源中,UARTn、AC97 和 EINTn 中断对于中断控制器而言是“或”关系。 当从内部外设和外部中断请求引脚收到多个中断请求时,中断控制器在仲裁步骤后请求 ARM920T 内核的 FIQ 或 IRQ。 仲裁步骤由硬件优先级逻辑决定