博主信息
博文 2
粉丝 0
评论 0
访问量 3989
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
5月22日作业---1.控制器,请求对象 2.依赖注入
土豆的博客
原创
1008人浏览过

控制器

按照ThinkPHP的架构设计,所有的URL请求(无论是否采用了路由),最终都会定位到控制器(也许实际的类不一定是控制器类,但也属于广义范畴的控制器)。

  • 控制器定义

控制器文件通常放在application/module/controller下面,类名和文件名保持大小写一致,并采用驼峰命名(首字母大写)。

一个典型的控制器类定义如下:

实例

<?php
namespace app\index\controller;

use think\Controller;

class Index extends Controller
{
    public function index()
    {
        return 'index';
    }
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

控制器类文件的实际位置是

application\index\controller\Index.php

访问URL地址是(假设没有定义路由的情况下)

http://localhost/index.php/index
  • 渲染输出

默认情况下,控制器的输出全部采用return的方式,无需进行任何的手动输出,系统会自动完成渲染内容的输出。

下面都是有效的输出方式:

实例

<?php
namespace app\index\controller;

class Index 
{
    public function hello()
    {
    	// 输出hello,world!
        return 'hello,world!';
    }
    
    public function json()
    {
    	// 输出JSON
        return json_encode($data);
    }
    
    public function read()
    {
    	// 渲染默认模板输出
        return view();
    }

}

运行实例 »

点击 "运行实例" 按钮查看在线实例

请求对象

当前的请求对象由think\Request类负责,在很多场合下并不需要实例化调用,通常使用依赖注入即可。在其它场合(例如模板输出等)则可以使用think\facade\Request静态类操作。

  • 请求对象调用

在控制器中通常情况下有两种方式进行依赖注入。

构造方法注入

操作方法注入

  • Facade调用

在没有使用依赖注入的场合,可以通过Facade机制来静态调用请求对象的方法(注意use引入的类库区别)。

实例

<?php

namespace app\index\controller;

use think\Controller;
use think\facade\Request;

class Index extends Controller
{
    
    public function index()
    {
		return Request::param('name');
    }    
}

运行实例 »

点击 "运行实例" 按钮查看在线实例

依赖注入

依赖注入其实本质上是指对类的依赖通过构造器完成自动注入,例如在控制器架构方法和操作方法中一旦对参数进行对象类型约束则会自动触发依赖注入,由于访问控制器的参数都来自于URL请求,普通变量就是通过参数绑定自动获取,对象变量则是通过依赖注入生成。

实例

<?php
namespace app\index\controller;

use app\index\model\User;

class Index
{
    protected $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }

    public function hello()
    {
        return 'Hello,' . $this->user->name . '!';
    }
}

运行实例 »

点击 "运行实例" 按钮查看在线实例


本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学