关闭

thinkphp5.0 rc4控制器使用篇之一

标签: 5.0thinkphp框架classnamespace
2908人阅读 评论(0) 收藏 举报
分类:

周六和周日休息了两天,今天我就根据完全开发手册说明控制器使用的顺序,逐个说说我个人的理解。高手和tp框架使用很熟练的直接跳过!

第一:定义由于tp框架基于MVC模式,故对于新手来说,掌握控制器的使用是必修课。(这里我默认是未修改过application/config.php配置文件以及tp5初始目录结构)

官方给出一个典型的控制器例子:

namespace app\index\controller;

class Index 
{
    public function index()
    {
        return 'index';
    }
}
这里除了<?php 外,第二行就是namespace,也就是命名空间。对于新手来说,你就理解为你平常操作window的文件夹一样,是一个目录结构就可以了。主要作用就是避免函数重名、同一个类文件中方法重名,大家知道,php是不允许函数重名的,否则会报致命错误的。假设有多个一样名称方法var_dump,位于不同命名空间\app\index\controller和\tihink,有了命名空间,就相当于告诉php解析器,这个var_dump 是路径:application/index/controller\class.php中的。另一个var_dump是路径:thinkphp/library/think/class.php中,这样,php解释器不会把两者和系统自带的var_dump()混为一谈了。

总结:简而言之,你就把命名空间理解为一个具有对应目录路径关系的东西来区别同名方法就好了。至于有人问到明明目录是application为什么用app呢?这是application目录下config.php配置文件定义的。'app_namespace'          => 'app'。


那么我们的访问路径应该如何填入浏览器上呢?假设你tp5rc4下载到了web根目录webroot下,那么完整的url地址应为:http://localhost/tp5rc4/pulibc/index.php/index/index/index.html,由于config.php定义了默认的模块、控制器、方法皆为index,如下图:


    // 默认模块名
    'default_module'         => 'index',
    // 默认控制器名
    'default_controller'     => 'Index',
    // 默认操作名
    'default_action'         => 'index',


在加上apache服务器默认加载index.php或者index.html,故简单的url地址为:http://localhost/tp5rc4/public

这时,你运行将会看到熟悉的tp界面。


当然,用过tp3.2.2版本的,细心一点就会发现除了命名空间有变化外,类的定义也有变化

tp3.2.2版本控制器是需要继承think命名空间下的Controller类的。而现在tp5可以无须继承该类。这也是tp5吸引我的地方。

另外控制器里tp3.2.2最常见的就是$this -> display(模板名);tp5则更为灵活,输出可多样化,结合配置文件配置(例如:'default_return_type'    => 'json',),直接return一个关联数组,就可以达到之前版本$this ->ajaxReturn(array(...));的效果。而输出到模板,尽管有助手函数view(),但我更喜欢类laravel风格:$view  = new \think\View(); return $view-> fetch(模版名);  (话外,就当装逼吧!哈哈。。。)

关于控制器就简单分享这些心得吧,主要是分享给新手。


第二:关于控制器初始化,我觉得没什么好讲的。主要介绍一个\think\Controller类的一个方法_initialize

tp3.2.2源码我看过一点点,在构造方法中调用了该方法,但内容为空,因此继承过\think\Controller类的控制器,如果在子类控制器中加入该方法,那么实例化时,必然会调用该方法。

总结:该方法可用于做权限控制。具体做法是:用一个基类继承\think\Controller类,重写_initialize()方法,里面可加检查权限判断代码,然后将所有需要权限控制的控制器继承该基类,便可实现权限控制。具体代码自行百度tp官方权限控制。



第三:前置操作,顾名思义,也就是在url访问某方法之前要执行的方法。

这个虽然知道,但在项目里没有应用过,秉着对新手负责的态度,我还是做了测试。

直接将完全手册的代码复制过来了。如下图:

namespace app\index\controller;

use think\Controller;

class Index extends Controller               //这里继承了think的Controller类
{
    //保护属性,前置方法列表,键名为前置方法名,键名所指向的数组则为附加条件。
    protected $beforeActionList = [
        'first',			   	//这里前置方法无其它附加条件,一定会执行。
        'second' =>  ['except'=>'hello'],	//这里前置方法是除了hello方法外才会执行。
        'three'  =>  ['only'=>'hello,data'],	//这里前置方法是仅适用于hello,data两个方法才执行。
    ];

    protected function first()
    {
        echo 'first<br/>';
    }

    protected function second()
    {
        echo 'second<br/>';
    }

    protected function three()
    {
        echo 'three<br/>';
    }

    public function hello()
    {
        return 'hello';
    }

    public function data()
    {
        return 'data';
    }
}
下面我们一次访问index控制器的hello方法和data方法。看看两者的执行结果

1.访问hello方法,浏览器键入地址:http://localhost/tp5rc4/public/index.php/index/index/hello.html,返回结果如下:

first
three
hello

我们来结合我在代码中给出的注释分析一下,前置方法列表说明first保护方法是任何该控制器的公有方法都会执行的。second方法看到我们访问hello方法,她不高兴了,也就不为hello开门了。而three方法说我的好基友只有hello,和data,所以它也会执行,这三个前置方法执行完毕,就名正言顺执行hello自己的方法了。因此依次输出如上结果!


2,访问data方法,返回结果如下:

first
second
three
data

结果,聪明的你自行分析吧!我要睡觉了,困死了。。。


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

ThinkPHP5.0入门到精通(含项目)-老孟编程

孟老师主讲,老孟编程团队。 ThinkPHP5.0入门到精通 课程介绍: 第一部分: Thinkphp5.0入门教程,使开发者快速从thinkphp3.2版本过度到thinkphp5.0,最高效的...
  • heimicms
  • heimicms
  • 2017-06-10 21:10
  • 1530

JDK升级禁用RC4算法导致Java Mail发送邮件失败

JDK升级到1.8_60后默认禁用RC4算法,导致腾讯SMTP服务访问失败,本文通过分析调试信息并结合搜索引擎予以解决。
  • hzylmf
  • hzylmf
  • 2016-10-07 18:27
  • 1857

从今日起开始我thinkphp5.0rc4个人使用总结之旅001------自动生成应用目录及相应文件

学习php时间较长,有近一年了,期间做了四个项目,有两个已上线运行,包括两个采用appcan打包的app安卓应用。当修改完各种bug递交给客户时,不得不说我是有些欣喜的,然而,仅过几天,又开始限于低落...
  • lvqingyao520
  • lvqingyao520
  • 2016-08-23 22:41
  • 1920

关于thinkphp5.0 rc4.0扩展类库自动与手动加载的问题

thinkphp5.0加载扩展库的三种方法
  • lvqingyao520
  • lvqingyao520
  • 2016-08-26 00:32
  • 3068

Android程序员学PHP开发(32)-ThinkPHP5.0(4)命名空间与公共空间-PhpStorm

转载请注明出处:http://blog.csdn.net/iwanghang/ 觉得博文有用,请点赞,请评论,请关注,谢谢!~ 这篇博文,我们来看一下,命名空间与公共空间之间的关系,使用需要注意的问...
  • iwanghang
  • iwanghang
  • 2017-03-02 13:49
  • 545

thinkphp5.0开发实战基础--如何使用框架

thinkphp5.0开发实战基础--如何使用框架 注:本文将thinkphp5.0下载解压到了tp5文件夹中!!! 1、首先 thinkphp5.0不同于thinkphp3.2的是:      ...
  • tammy1151
  • tammy1151
  • 2017-07-09 15:00
  • 324

thinkphp5.0中使用PHPExcel导入excel数据

PHPExcel导入excel数据
  • Lg632
  • Lg632
  • 2017-03-24 08:59
  • 519

入门ThinkPHP5.0模型篇-对数据库的操作

第一小节讲数据库操作,也就是DB类,DB类的链接,增删改查以及条件构造器的链接。第二小节主要学习TP5的模型层,模型层和DB类功能相同,也是对数据库进行增删改查的操作,只是它有了更高级的功能,模型层只...
  • zhou520fang
  • zhou520fang
  • 2017-12-15 10:17
  • 40

关于workerman与thinkphp5.0结合使用

thinkphp5.0的看云文档上有了一点说明 说明文档 这里主要说一下遇到的问题。 安装部分,可以自行百度,然后直接复制文档中的命令,直接安装就好。安装完毕以后,thinkphp5.0 根目录...
  • yuexiage1
  • yuexiage1
  • 2017-12-27 14:40
  • 29

thinkphp3.2【空操作和空控制器使用】

【空操作和空控制器使用】 空操作:就没有指定的操作方法 空控制器:没有指定控制器 http://网址/index.php/Home/User/login http://网址/index.php...
  • qq_33382313
  • qq_33382313
  • 2016-06-18 10:20
  • 923
    个人资料
    • 访问:42925次
    • 积分:703
    • 等级:
    • 排名:千里之外
    • 原创:27篇
    • 转载:19篇
    • 译文:0篇
    • 评论:4条