Thinkphp 5框架学习

2023-12-29 22:42:42

TP框架主要是通过URL实现操作

http://servername/index.php/模块/控制器/操作/参数/值..

index.php 为入口文件,在 public 目录内的 index.php 文件;
模块在 application 目录下默认有一个 index 目录,这就是一个模块;
而在 index 目录下有一个 controller 控制器目录的 Index.php 控制器;
Index.php 控制器的类名也必须是 class Index,否则错误:
而操作就是控制器 class Index 里面的方法,比如: index 或 hello;
那么完整形式为: public/index.php/index/index/index
晕了吗?
官方给的默认模块,默认控制器,默认操作都是 index?

环境变量

?ThinkPHP5.1 提供了一个类库 Env 来获取环境变量:??return Env::get('app_path');
系统路径? ? ? ? ? Env 参数名称
应用根目录? ? ? ? root_path
应用目录? ? ? ? ? ?app_path
框架目录? ? ? ? ? ?think_path
配置目录? ? ? ? ? ?config_path
扩展目录? ? ? ? ? ?extend_path
composer 目录? ?vendor_path
运行缓存目录? ? ?runtime_path

路由目录? ? ? ? ? ?route_path

当前模块目录? ? moudle_path?


?控制器

定义:控制器,即 controller,控制器文件存放在 controller 目录下;
类名和文件名大小写保持一致,并采用驼峰式首字母大写) ;

use think Controller;
class Index extends Controller

继承控制器基类,可以更方便使用功能,但不是必须的:
系统也提供了其它方式,在不继承的情况下完成相同功能;
前面我们知道如果是一个单词,首字母大写,比如 class Index;
URL 访问时直接 public/index 即可;
那么如果创建的是双字母组合,比如 class Helloworld;
URL 访问时必须为: public/hello_world;

如果你想原样的方式访问 URL,则需要关闭配置文件中自动转换:
'url convert=> false,
此时,URL 访问可以为: public/Helloworld;
如果你想改变根命名空间 app 为其它,可以在根目录下创建.env 文
然后写上配对的键值对即可,app_namespace=application;?

渲染输出?
<?php
namespace app\index\controller;
use think\facade\Env;

class HelloWorld{
    public function test1(){
        return view();
    }
}

配置:在模块目录下,controller同级目录创建view目录,在该目录下创建相同控制器名的文件夹,在控制器文件夹里创建 方法名.html

?一 般来说,正常页面都是 html 输出,用于模版,AJAX 默认为 json;
如果继承了基类控制器,那么可以定义控制器初始化方法: initialize();
initialize()方法会在调用控制器方法之前执行:且不能用return返回,否则无效果

protected function initialize(){
//parent::initialize();
echo 'init';
}

前置操作

1. 继承 Controller 类后可以设置一个$beforeActionList 属性来创建前置方注

use think\Controller;
class Before extends Controller
{
    protected $beforeActionList=[
        'first','second'=>['except'=>'one'],'third'=>['only'=>'one']
    ];
    protected function first(){
        echo 'first';
    }
    protected function second(){
        echo 'second';
    }
    protected function third(){
        echo 'third';
    }
 public function index(){
    if ($this->flag){
        $this->success('注册成功','../');
    }
    else{
            $this->error('失败');
        return 'index';
    }
 }
public function one(){
        return 'one';
}
public function two(){
    return 'two';
}
public function three(){
        return 'three';
}
}

此时,我们可以分别 URL 访问不同的方法来理解前置的触发执行;

跳转和重定向

Controller 类提供了两个跳转的方法success(msg,ur)和 error(msg)

   protected $flag = false;
    public function index(){
        if ($this->flag){
            $this->success('注册成功','../');
        }
        else{
                $this->error('失败');
            return 'index';
        }
     }

成功或错误有一个固定的页面模版:thinkphp/tpl/dispatch jump
在 app.php 配置文件中,我们可以更改自己个性化的跳转页面;
//默认跳转页面对应的模板文件
'dispatch success tmpl' => Env::get('think path')?

Controller类提供了 _empty()方法用于对应不存在的方法访问

public function _empty($name){
        return "不存在方法".$name;
     }

控制器不存在的对应

<?php
namespace app\index\controller;
use think\Request;
class Error{
    public function index(Request $r)
    {
        return '不存在'.$r->controller();
    }
}

?>

文章来源:https://blog.csdn.net/m0_73847654/article/details/135296290
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。