您现在的位置是:首页 > 技术教程 正文

Thinkphp 5框架学习

admin 阅读: 2024-03-17
后台-插件-广告管理-内容页头部广告(手机)

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 目录下;
类名和文件名大小写保持一致,并采用驼峰式首字母大写) ;

  1. use think Controller;
  2. 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; 

渲染输出 
  1. <?php
  2. namespace app\index\controller;
  3. use think\facade\Env;
  4. class HelloWorld{
  5. public function test1(){
  6. return view();
  7. }
  8. }

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

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

  1. protected function initialize(){
  2. //parent::initialize();
  3. echo 'init';
  4. }

前置操作

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

  1. use think\Controller;
  2. class Before extends Controller
  3. {
  4. protected $beforeActionList=[
  5. 'first','second'=>['except'=>'one'],'third'=>['only'=>'one']
  6. ];
  7. protected function first(){
  8. echo 'first';
  9. }
  10. protected function second(){
  11. echo 'second';
  12. }
  13. protected function third(){
  14. echo 'third';
  15. }
  16. public function index(){
  17. if ($this->flag){
  18. $this->success('注册成功','../');
  19. }
  20. else{
  21. $this->error('失败');
  22. return 'index';
  23. }
  24. }
  25. public function one(){
  26. return 'one';
  27. }
  28. public function two(){
  29. return 'two';
  30. }
  31. public function three(){
  32. return 'three';
  33. }
  34. }

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

跳转和重定向

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

  1. protected $flag = false;
  2. public function index(){
  3. if ($this->flag){
  4. $this->success('注册成功','../');
  5. }
  6. else{
  7. $this->error('失败');
  8. return 'index';
  9. }
  10. }

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

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

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

控制器不存在的对应

  1. <?php
  2. namespace app\index\controller;
  3. use think\Request;
  4. class Error{
  5. public function index(Request $r)
  6. {
  7. return '不存在'.$r->controller();
  8. }
  9. }
  10. ?>

模型定义

1. 在 MVC 中,我们已经使用过 Controller(c),View(V),剩下一个就是 Model(M);
Mode1 即模型,就是处理和配置数据库的相关信息;
2 .在项目应用根目录创建 model 文件夹,并且创建 User.php;

数据库查询(链式查询) 

查询规则
1。 前面课程中我们通过指向符号“->”多次连续调用方法称为: 链式查询:
当 Db::name('user')时,返回数据库对象,即可连缀数据库对应的方法:
2 .而每次执行一个数据库查询方法时,比如 where(),还将返回数据库对象;
3 .只要还是数据库对象,那么就可以一直使用指向符号进行链式查询:
如果想要最后得到结果,可以使用 find()、select()等方法结束查询;
而 find()和 select()是结果查询方法(放在最后) ,并不是链式查询方法;
Db::name( 'user')->where( 'id',27)->order( 'id','desc')->find()
除了查询方法可以使用链式连贯操作,CURD 操作也可以使用 (下节课研究) :

  1. <?php
  2. namespace app\index\controller;
  3. use think\Controller;
  4. use think\Db;
  5. use app\index\model\Info;
  6. class DataTest extends Controller{
  7. public function t(){
  8. #SELECT * FROM `info` LIMIT 1
  9. $data = Db::table('info')->find();
  10. return Db::getLastSql();
  11. }
  12. public function t0(){
  13. #SELECT * FROM `info`
  14. $data = Db::table('info')->select();
  15. return Db::getLastSql();
  16. }
  17. public function t1(){
  18. #SELECT * FROM `info` WHERE `name` = 'admin' LIMIT 1
  19. $data = Db::table('info')->where('name','admin')->find();
  20. return Db::getLastSql();
  21. }
  22. public function t2(){
  23. #SELECT `name` FROM `info` LIMIT 1
  24. $data = db('info')->value('name');
  25. echo $data;
  26. return Db::getLastSql();
  27. }
  28. public function t3(){
  29. #SELECT `name` FROM `info`
  30. $data = db('info')->column('name','id');
  31. return json($data);
  32. }
  33. public function getModelData(){
  34. $data=Info ::select();
  35. #return json($data);
  36. }
  37. }
  38. ?>

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索
排行榜