您的位置:澳门新葡萄京娱乐网站 > 编程知识 > 从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图像和文字

从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图像和文字

2019-12-22 01:35

那么为什么请求还要动态地绑定参数呢?因为很多时候需要传递 session 的值,来维持会话

版权声明:本文为博主原创文章,未经博主允许不得转载。

tp5分配数据的方式依旧使用$this->assign()

访问:


// 默认全局过滤方法 用逗号分隔多个'default_filter' => 'htmlspecialchars',

我们可以获分别获取 get post cookie file 等方式的参数

结合thinkphp官网 3.1入门教程和3.2.1技术手册开始对thinkphp进行学习,thinkphp是mvc能够很好地分割各部分。

thinkphp的php执行代码大多是指控制器方法当中实现的,控制器方法可以没有对应的输出模板,如果有则输出模板会以html的形式与方法对应,数据库的操作是大多通过模型实现的。

1.修改项目路径(工作根目录)

thinkphp3.2.1默认工作根目录是/web/Applications

当用户访问

修改项目路径:在根目录下修改index.php

define('APP_PATH','./application/');

define('APP_PATH','./app/');

访问 自动生成相关文件

根目录下修改:

define('BIND_MODULE','Admin');

// 定义应用目录

define('APP_PATH','./App/');

2.在工作根目录文件夹下创建模块

在工作下新建文件夹Admin,并创建空白index.html 在根目录下index.php添加

//添加

define('BIND_MODULE','Admin');

// 定义应用目录

define('APP_PATH','./App/');

浏览器当中访问: 便可以在admin模块当中自动生成所有的相关文件(类似于同一文件夹下的Home文件夹)

注意要在生成完所有之后注释掉define('BIND_MODULE','Admin');

3.thinkphp入口:

thinkphp 3.2.1只有一个默认的入口地址就是index控制器的index方法。

访问

4.thinkphp url

url路径:

模块Home (前台)

模块Admin: (后台)

参数粗传递

thinkphp方法内可以使用U()函数创建URL        U(控制器名/方法)

例如   myurl=U(Index/index)

5.视图view  模板

thinkphp3.2.1当中如果方法要对应着输出html 那么模板的位置在view文件夹下对应的控制器文件夹下的同名html文件夹。

通过$this->display ();启用模板;通过$this->aa = $bb;实现php到html的变量映射,在html 当中使用{$aa}接收。

例如

/web/App/Home/Controller/IndexController.class.php 里面的univpage()方法:

public function univpage($id) {  $this->univ_id = $id;//变量映射 $this->display ();//启用模板 }

对应的模板位置为/web/App/Home/View/Index/index.html

<html> ................... <body> hello {$univ_id } </body> </html>

访问  便可以输出id的值10002

6.模型model

模型的作用是用于数据库操作,可以方便简单的实现CURD,而且还可以实现自动获取表单,对提交表单进行自动验证等。

每个项目有一个连接的数据库配置文件,执行CURD命令时调用连接数据库。

每个项目的数据库连接配置都是在每个项目的/common/conf/config.php文件当中,如F:webAppCommonConfconfig.php,连接数据库是使用D和M时自动到config.php当中找到相关配置连接数据库。

'DB_DSN' => 'mysql://root:881234@192.168.1.249:3306/univinfo'

例如进行一下实例化操作:

$Data = M('think_data'); // 实例化Data数据模型

系统会自动使用/common/conf/config.php当中的数据库连接文件连接数据库,然后选择其中的think_data表。

当执行实例化对象create()函数时会自动获取表单传递过来的数据,

thinkphp**提交表单:注意提交表单要,使用M()D()**时,一定要注意提交的表单的参数名要和数据库表当中的字段完全一致才能够执行自动匹配。

例如:

模板提交参数

<form action="__URL__/login_submit" method="get"> Name: <input type="text" name="user_name" /> Password: <input type="text" name="user_password" /> <input type="submit" /> </form>

控制器内方法接收传递过来参数

public function register_submit() {   // echo "register_submit()";   $User = M ( 'univ_user_basic_info' ); // 实例化模型   $User->create (); // 获取post提交过来的表单(注意可能只是post可以)   echo $User->user_name;   // dump($User); //展示数据库状况   $User->add (); // 写入数据库   echo "register success";  }

// 数据库配置1'db1' => [// 数据库类型'type' => 'mysql',// 服务器地址'hostname' => '127.0.0.1',// 数据库名'database' => 'blog1',// 数据库用户名'username' => 'root',// 数据库密码'password' => '123456',// 数据库连接端口'hostport' => '',// 数据库连接参数'params' => [],// 数据库编码默认采用utf8'charset' => 'utf8',// 数据库表前缀'prefix' => 'lws_',],// 数据库配置2'db2' => [// 数据库类型'type' => 'mysql',// 服务器地址'hostname' => '127.0.0.1',// 数据库名'database' => 'blog2',// 数据库用户名'username' => 'root',// 数据库密码'password' => '',// 数据库连接端口'hostport' => '',// 数据库连接参数'params' => [],// 数据库编码默认采用utf8'charset' => 'utf8',// 数据库表前缀'prefix' => 'lws_',],

这样的话就是进行了全配置但是如果我们有些页面不想这样配置的话我们需要在这样的页面上写上

然后把所有设为All:

layout.html

最后修改根目录下 public/.htaccess 文件内容为:

thinkPHP5 使用 return 来返回一个html ,自动渲染到页面上

//添加一条数据$data['article_title'] = 'PHP是世界上最好的语言';$data['article_content'] = '如题';db->insert;//或 db->save;

//添加多条数据$data = [ ['article_title' => '标题1', 'article_content' => '内容1'], ['article_title' => '标题2', 'article_content' => '内容2'], ['article_title' => '标题3', 'article_content' => '内容3']];db->insertAll;
composer create-project topthink/think tp5 dev-master --prefer-dist
return redirect('https://www.oyhdo.com');

2.删除 vhost.conf 中原有的默认内容,添加如下内容

index.html:

我们知道,我们的搜索引擎抓取页面最多抓三层,但是我们刚刚写的那种 URL 已经太多层了,这非常不利于搜索引擎的收录,于是 tp5 给我们提供了一种简化的方法,就是 route.php

tp5废除了url/参数名1/参数值1/参数名2/参数值2......这样的方式传参,还是老老实实用url?参数名1=参数值1&参数名2=参数值2......这样传吧。

{__NOLAYOUT__}
assign; }}

fetch(); }}

Index/view/Index/index.html

use thinkRoute;Route::rule('article/:id','home/article/detial');

通过以下代码可以得到 username

如果需要强制区分url大小写,修改 url_convert 为false

或者实例化一个 Request 对象,但是这种方法只能接受 url 后面是 & 连接的参数,重写的好像不行

index.html页面读取数据:

public function hello { $this->assign; return $this->fetch(); }

    hello {$name}! 

随着学习不断更新......

http.conf 中解开下面的注释

访问网址变为:

$Request = Request::instance$Rquest->post$Request->file()

$this->request->bind; echo $this->request->user;

首先到tp官网下载了一个最新的ThinkPHP5.0.22完整版:

这样就会在当前目录下形成一个 名为 tp5 的文件夹,这个文件夹中存放的就是 thinkphp5 的基本的框架

首先在数据库配置中配置多个数据库:

当然我们的 tp 也有对一些东西的封装,比如实现输出一段话然后进行跳转到某个方法,或者是直接进行重定向

$arr = input;

public/index.php 项目入口文件,定义了应用目录的位置以及包含框架启动文件来启动框架

我在父类的初始化方法中定义了这两个常量:

0X02 重点目录结构及文件介绍

可以在配置文件中设置全局过滤方法:

并在虚拟主机配置中写上

public function index(){ $arr = array('state'=>1,'msg'=>'success'); return json; //返回其它状态码或响应头信息 //return json($arr, 201, ['Cache-control' => 'no-cache,must-revalidate']); //xml格式 //return xml;}

这个意思就是我们访问 hello/name 就会转给 index/Index/hello ,并且要求是 Get 方法,后缀名是 HTML

{$haha}

application/config.php 项目配置文件,开启 debug 调试模式

tp5的数据库配置文件在根目录 /application/database.php:

0X01 Thinkphp 的安装

修改application/config.php中的pathinfo_depr :

如果我们模板文件中的静态文件路径想要不写死的话,我们可以在 php 文件中的 fecth 前设置字符替换

//删除数据$whe['article_id'] = 1;db->where;

public : 这个是我们项目的入口文件,thinkphp 是一个单一入口的框架

直接扔到了服务器上,解压后目录结构如下:

 DocumentRoot "E:phpstudyPHPTutorialWWWtp5public" ServerName localhost  Options FollowSymLinks ExecCGI AllowOverride All Order allow,deny Allow from all Require all granted 
配置文件中默认输出类型default_return_type为html:直接打印输出字符串、数组,没什么特殊:public function index(){ $str = 'hello,world!'; $arr = array('state'=>1,'msg'=>'success'); //打印字符串 echo $str; //打印数组 var_dump;}

0X03 配置虚拟主机

根目录下application/config.php为应用配置文件,设置一些常用的配置,以下简称为“配置文件”:

echo input;
//配置一个参数config;//批量配置参数config([ 'info'=>['sex'=>'nan','aihao'=>'nv']]);//获取一个配置参数echo config;//获取一组配置参数dump;//获取一个二级配置参数echo config;
LoadModule rewrite_module modules/mod_rewrite.so

修改数据:tp3.2使用save(),tp5使用update()

 RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^$ index.php [L,E=PATH_INFO:$1]

tp3里面的正确跳转:$this->success()、错误跳转:$this->error()、重定向:$this->redirect(),在tp5里面同样适用

thinkphp : 框架的核心目录

本文实例讲述了从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记。分享给大家供大家参考,具体如下:

然后我们写模板的时候就在最上面加上对这个文件的引用

如图建立视图层,index.html作为前台首页:

return [ '__pattern__' => [ 'name' => 'w ', ], '[hello]' => [ // ':id' => ['index/hello', ['method' => 'get'], ['id' => 'd ']], // ':name' => ['index/hello', ['method' => 'post']], ], 'hello/[:name]' => ['index/Index/hello',['method' => 'get','ext' => 'html']],];

tp5渲染模板,在控制器中继承thinkController类,使用return $this->fetch()或者使用助手函数return view()

5.请求和响应

(与tp3.2相比,父类控制器不能是Public控制器)

如果我们想全局引入页眉页脚,这个配置需要在 config.php 中进行设置,在模板配置中添加下面的代码

(注意:获取的数据为数组,要加上 /a 修饰符才能获取到)

index/controller/Index.php

以下记录一些学习中遇到的问题及解决办法,还有tp3.2和tp5.0的一些区别,适合给用过tp3没用过tp5的童鞋做个参考。

包括我们通过下面的代码获取 url

query('select * from lws_article where art_id = 1'); $db2->query('select * from lws_article where art_id = 2'); }}
    hello {$data}! 

然后在子类控制器中就可以使用这个常量做一些判断:

1.httpd.conf 中判断下面是否被注释,如果被注释请取消注释

fetch; }}

2.关键文件

tp3.2可以使用I方法安全获取get、post等系统输入变量tp5中使用助手函数input()//获取get变量$data1 = input;//获取post变量$data2 = input;//获取当前请求变量$data3 = input;//获取request变量$data4 = input;//获取cookie变量$data5 = input;//获取session变量$data6 = input;//获取上传文件信息$data7 = input;

可以返回多种格式的值 比如 json xml 或者通过 $this->fetch() 来进行模板渲染

 Options  FollowSymlinks -Multiviews RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^$ index.php?/$1 [QSA,PT,L]

1.控制器的基本写法

或者使用 Route 类,效果一样:

tp5 给我们提供了 url() 这个函数帮我们自动生成 Url

控制器里打印$_GET

$this->assign; 

return $this->fetch; 

tp3.2里面使用C方法设置、获取配置参数

AllowOverride All
正常需要这样访问User控制器的user操作:为了前台url显示简洁一些,要去掉模块名index,然后就崩了:如果只有一个模块,可以在 /application/common.php 中添加:// 绑定当前访问到index模块define('BIND_MODULE','index');
public function url() { echo url; }

去掉index.php也可访问:

当然在这种情况下参数名还是会很多斜杠,还是不是很友好,于是我们可以在 config.php 中将默认的斜杠分隔符进行修改,改成其他的这样就避免了这个问题

添加数据:tp3.2使用add(),tp5使用insert():返回插入条数 或save():返回id

$this->request->get()$this->request->post()$this->request->cookie()$this->request->file()

然后在/public/下新建一个入口文件admin.php,绑定后台模块admin,来访问后台:

每一个模块都有自己的控制器、视图、和模型,访问的时候是按照 index.php/模块/控制器/方法,访问的,然后每一个控制器在 view 中对应着一个同名的文件夹,比如说 controller/Index 控制器, view/Index 就是这个控制器对应的模板文件夹,那么每一个方法都会在模板文件夹下对应一个同名的 html 文件作为这个方法的模板

(对于只做API开发的情况,可以设置default_return_type为json,直接return $arr即可返回json格式数据)

这个也有自己的函数助手

assign; return $this->fetch(); }}

/index/index/url2/a/1/b/2.html

把index模块作为前台,在前台新建了一个User控制器:

{layout name="layout"/}

配置文件中设置 app_debug 为true,打开应用调试模式,以便开发调试:

0X05 参考

使用connect方法切换数据库:

2.模板和控制器的关系

目录结构整体与tp3.2大同小异,文件夹首字母小写了,应用入口文件在根目录下public/index.php,官方文档对public文件夹定义为WEB部署目录:

我这里选择的是使用 windows 下的 composer 进行安装,收下首先下载 composer 这个工具,安装完成以后进入我们想要创建项目的文件夹输入下面的命令

以Apache服务器为例,首先确认Apache配置文件httpd.conf中开启了mod_rewrite.so模块:

'layout_on' => 'true','layout_name' => 'layout','layout_item' => '{__CONTENT__}',

配置服务器域名解析的时候需要把项目根目录指向/public:

{include file="/index/header"/}{__CONTENT__}{include file="/index/footer"/}
//查询一条$artinfo = db;//查询全部$artinfo = db;//查询一个字段$artinfo = db->value;

tp5 使用的是 $this->requrst->param() 接受参数,当然也要在开始写上命名空间

db()助手使用起来比较方便,但每次都会重新连接数据库,因此应当尽量避免多次调用,建议还是使用Db类操作数据库。

注意:如果使用 phpstudy 的话,官方默认的 .htaccess 是不可以的,需要修改成下面这个样子

分割线总是要有的

3.配置 URL 重写

tp5新增 redirect() 助手函数用于重定向:

Include conf/vhosts.conf LoadModule vhost_alias_module modules/mod_vhost_alias.so

删除数据:没错还是delete()

echo $this->request->param;

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

echo request;

连接数据库:tp3.2支持M方法连接数据库,tp5使用 Db类 或助手函数db()

返回json格式数据:

如果我们想每个方法都使用这个操作,我们就把上面这段代码放到 控制器的构造函数里面

在父类控制器中初始化分配数据,子类控制器渲染模板:

function __construct(){ parent::__construct(); $this->view->replace(['__PUBLIC__' => '/static',]);}

查询数据:依旧使用find()select()方法,查询一个字段使用value()方法代替getField()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

但是项目通常会有前后台的区分,至少两个模块,用上面的方法绑定index模块后,再访问其它模块就会报错:

写一个栗子,新建一个Base控制器作为父类控制器,Index控制器继承Base控制器

或者我们可以使用函数助手 input(),下面这段代码能达到和上面一样的效果

Db类操作查询构造器:where ->select();//以下为数据库配置了表前缀// 插入记录$res = Db::name->insert(['title' => '标题', 'content' => '内容']);// 更新记录$res = Db::name->where->update;// 查询数据$res = Db::name->where->select();// 删除数据$res = Db::name->where->delete(); //链式操作举例 $artlist = Db::name ->where ->field ->order ->limit; } }
assign; return $this->fetch(); }}
{$name}

这个方法运行的结果就是

tp5使用助手函数config()设置、获取配置参数:

$this->view->replace(['__PUBLIC__' => '/static',]);

tp5废除了一大堆常量:

application : 应用目录,我们的模型视图控制器都会放在这个文件夹下,这是我们开发的主阵地

用tp3.2.3做了不少项目,但是毕竟要与时代接轨,学习一些新的框架,比如tp5

一般的模板渲染就不想介绍了,这里说下模板布局,其实就是在 view 文件夹下有一个 layout.html 文件,这个文件的内容是这样的

访问tp.oyhdo.com等同于访问tp.oyhdo.com/index.php/index/Index/index

6.模板与输出

// pathinfo分隔符 'pathinfo_depr' => '-',

0X04 基本的写法

即默认模块index,默认控制器Index,默认操作index

模块中的控制器实际上就是一个一个的类,这个类写的时候要继承 Controller 并且要在前面写上命名空间

REQUEST_METHOD IS_GET IS_POST IS_PUT IS_DELETE IS_AJAX __EXT__ COMMON_MODULE MODULE_NAME CONTROLLER_NAME ACTION_NAME APP_NAMESPACE APP_DEBUG MODULE_PATH等
return json;return xml;

需要使用的常量可以自己定义,例如IS_GET、IS_POST

3.对 SEO 友好的路由

isGet; define->isPost; }}

4.URL 自动生成

对于多模块的情况,可以在 /application/route.php 中绑定默认模块路由:use thinkRoute;Route::bind;

配置好后我们只要添加这样几个东西就 OK 了

定义路由规则之后访问

application/database.php 数据库配置文件

//修改数据$whe['article_id'] = 1;$data['article_title'] = '修改后的标题';db->where;
request->param; return '*{ padding: 0; margin: 0; } .think_default_text{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px } :) ThinkPHP V5
十年磨一剑 - 为API开发设计的高性能框架[ V5.0 版本由 七牛云 独家赞助发布 ]'; }}

更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。

echo $this->request->url();

tp3渲染模板直接在控制器里$this->display(),tp5并不支持。

return json;return xml;

Db类操作原生SQL:

配置文件修改分别为default_module、default_controller、default_action

 ServerAdmin 1977629361@qq.com DocumentRoot /var/www/tp/public ServerName tp.oyhdo.com ServerAlias tp.oyhdo.com DirectoryIndex index.php index.html index.htm 
例如一篇博客详情页,原来的网址为:http://oyhdo.com/home/article/detial?id=50,即home模块下的article控制器下的detial操作方法,传递参数id。在路由配置文件 application/route.php 中添加路由规则:return [ 'article/:id' => 'home/article/detial',];

(修改模板引擎标签 配置文件

本文由澳门新葡萄京娱乐网站发布于编程知识,转载请注明出处:从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图像和文字

关键词: