ThinkPHP 5.1升级到指定版本composer命令
thinkphp 5.1 以上版本只能通过composer来安装升级。
以防万一,建议先备份application和修改过的目录。
cmd或者ps进入网站根目录。执行如下命令之一:
composer update topthink/framework 5.1.15
composer update topthink/framework=5.1.15
composer update topthink/framework:5.1.15
后面的5.1.15改成想要升级的版本即可。指定版本有时候很有用,毕竟最新的未必是最好的。
---------------------
作者:qcw
来源:CSDN
原文:https://blog.csdn.net/xy255c/article/details/80658097
版权声明:本文为博主原创文章,转载请附上博文链接!
默认情况下,URL地址中的控制器和操作名是不区分大小写的
1 tp5全部小写
模块在ThinkPHP中的概念其实就是应用目录下面的子目录,而官方的规范是目录名小写,因此模块全部采
用小写命名,无论URL是否开启大小写转换,模块名都会强制小写
2 控制器首字母变成大写
3 驼峰式,用下划线方式
5.0不再支持普通的URL访问方式,所以下面的访问是无效的,你会发现无论输入什么,访问的都是默认的
控制器和操作^_^
http://tp5.com/index.php?m=index&c=Index&a=hello
建议统一采用小写
如果希望严格区分大小写访问(或者要支持驼峰法进行控制器访问),可以在应用配置文件中设置:
// 关闭URL自动转换(支持驼峰访问控制器)
'url_convert' => false,
ThinkPHP5 的架构设计和之前版本的主要区别之一就在于增加了 Request 请求对象和 Response 响应对
象的概念,了解了这两个对象的作用和用法对你的应用开发非常关键。
ThinkPHP5 的 Request 对象由 thinkRequest 类完成。
Request 对象的一个主要职责是统一和更安全地获取当前的请求信息,你需要避免直接操作 $_GET 、$_POST 、 $_REQUEST 、 $_SESSION 、 $_COOKIE ,甚至 $_FILES 等全局变量,而是统一使用
Request 对象提供的方法来获取请求变量。
如果你的控制器类继承了 hinkController
类的话,可以定义控制器初始化方法_initialize
,在该控制器的方法调用之前首先执行
继承thinkController
如果控制器类继承了 thinkController 的话,可以做如下简化调用:
<?php
namespace appindexcontroller;
use thinkController;
class Index extends Controller
{
public function hello($name = 'World')
{
// 获取当前URL地址 不含域名
echo 'url: ' . $this->request->url() . '<br/>';
return 'Hello,' . $name . '!';
}
}
自动注入请求对象
如果没有继承 thinkController ,则可以使用 Request 对象注入的方式来简化调用:
<?php
namespace appindexcontroller;
use thinkRequest;
class Index
{
public function hello(Request $request, $name = 'World')
{
// 获取当前URL地址 不含域名
echo 'url: ' . $request->url() . '<br/>';
return 'Hello,' . $name . '!';
}
}
提示:
hello方法的request参数是系统自动注入的,而不需要通过URL请求传入。
使用助手函数
如果既没有继承 thinkController 也不想给操作方法添加额外的 Request 对象参数,那么也可以使用
系统提供的助手,例如:
<?php
namespace appindexcontroller;
class Index
{
public function hello($name = 'World')
{
// 获取当前URL地址 不含域名
echo 'url: ' . request()->url() . '<br/>';
return 'Hello,' . $name . '!';
}
}
上面任意一种方式都可以调用当前请求的 Request 对象实例,然后通过请求对象实例的方法来完成不同的
信息获取或者设置。
请求对象
获取请求变量
系统推荐使用 param 方法统一获取当前请求变量,该方法最大的优势是让你不需要区分当前请求类型而使用
不同的全局变量或者方法,并且可以满足大部分的参数需求
<?php
namespace appindexcontroller;
use thinkRequest;
class Index
{
public function hello(Request $request)
{
echo '请求参数:';
dump($request->param());
echo 'name:'.$request->param('name');
}
}
访问下面的URL地址:
http://tp5.com/index/index/hello.html?test=ddd&name=thinkphp
页面输出结果为:
请求参数:
array (size=2)
'test' => string 'ddd' (length=3)
'name' => string 'thinkphp' (length=8)
name:thinkphp
系统提供了一个input助手函数来简化 Request 对象的param方法,用法如下:
<?php
namespace appindexcontroller;
class Index
{
public function hello()
{
echo '请求参数:';
dump(input());
echo 'name:'.input('name');
}
}
param 方法获取的参数会自动判断当前的请求,以 POST 请求为例的话,参数的优先级别为:
路由变量 > 当前请求变量($_POST变量) > $_GET变量
param 方法支持变量的过滤和默认值,
<?php
namespace appindexcontroller;
use thinkRequest;
class Index
{
public function hello(Request $request)
{
$name 的默认值 是world, 转小写
echo 'name:'.$request->param('name','World','strtolower');
$test 的默认值 是thinkphp, 转大写
echo '<br/>test:'.$request->param('test','thinkphp','strtoupper');
}
}
访问下面的URL地址:
http://tp5.com/index/index/hello.html?test=ddd&name=thinkphp
使用助手函数的代码为:
<?php
namespace appindexcontroller;
class Index
{
public function hello()
{
echo 'GET参数:';
dump(input('get.'));
echo 'GET参数:name';
dump(input('get.name'));
echo 'POST参数:name';
dump(input('post.name'));
echo 'cookie参数:name';
dump(input('cookie.name'));
echo '上传文件信息:image';
dump(input('file.image'));
}
}
获取请求参数
<?php
namespace appindexcontroller;
use thinkRequest;
class Index
{
public function hello(Request $request)
{
echo '请求方法:' . $request->method() . '<br/>';
echo '资源类型:' . $request->type() . '<br/>';
echo '访问IP:' . $request->ip() . '<br/>';
echo '是否AJax请求:' . var_export($request->isAjax(), true) . '<br/>';
echo '请求参数:';
dump($request->param());
echo '请求参数:仅包含name';
dump($request->only(['name']));
echo '请求参数:排除name';
dump($request->except(['name']));
}
}
获取URL信息
public function hello(Request $request,$name = 'World')
{
// 获取当前域名
echo 'domain: ' . $request->domain() . '<br/>';
// 获取当前入口文件
echo 'file: ' . $request->baseFile() . '<br/>';
// 获取当前URL地址 不含域名
echo 'url: ' . $request->url() . '<br/>';
// 获取包含域名的完整URL地址
echo 'url with domain: ' . $request->url(true) . '<br/>';
// 获取当前URL地址 不含QUERY_STRING
echo 'url without query: ' . $request->baseUrl() . '<br/>';
// 获取URL访问的ROOT地址
echo 'root:' . $request->root() . '<br/>';
// 获取URL访问的ROOT地址
echo 'root with domain: ' . $request->root(true) . '<br/>';
// 获取URL地址中的PATH_INFO信息
echo 'pathinfo: ' . $request->pathinfo() . '<br/>';
// 获取URL地址中的PATH_INFO信息 不含后缀
echo 'pathinfo: ' . $request->path() . '<br/>';
// 获取URL地址中的后缀信息
echo 'ext: ' . $request->ext() . '<br/>';
return 'Hello,' . $name . '!';
}
数据库
1. 数据库原生查询(SQL查询);
2. 数据库链式查询(查询构造器);
3. 模型的对象化查询;
如果你使用了多个模块,并且不同的模块采用不同的数据库连接,那么可以在每个模块的目录下面单独定义数据库配置。
提示:
模块的数据库配置文件中只需要配置和全局数据库配置文件差异的部分,相同的不需要重复配置。
1 原生查询
原则上,读操作都使用 query 方法,写操作使用 execute 方法即可
//创建
$result = Db::excute('insert into test (name,age) values ("哈哈",18)');
//更新
$result =Db::excute('update test set name="嘻嘻" where id= 21');
//查询
$result = Db::query('select * from test where id =1 ');
模型
模型类可以使用静态调用或者实例化调用两种方式,例如:
// 静态调用
$user = User::get(1);
$user->name = 'thinkphp';
$user->save();
// 实例化模型
$user = new User;
$user->name= 'thinkphp';
$user->save();
// 使用 Loader 类实例化(单例)
$user = Loader::model('User');
// 或者使用助手函数`model`
$user = model('User');
$user->name= 'thinkphp';
$user->save();