一、Thinkphp5中No input file specified 问题解决
.htaccess文件中的
1 | RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] |
在默认情况下会导致No input file specified.
修改成
1 | RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1] |
官方教程https://www.kancloud.cn/manual/thinkphp5/content
二、路由
关闭路由,完全使用默认的PATH_INFO方式URL:
1 | 'url_route_on' => false, |
路由关闭后,不会解析任何路由规则,采用默认的PATH_INFO 模式访问URL:
1 | http://serverName/index.php/module/controller/action/param/value/... |
结构如图
其实可以省略index.php
1 | http://192.168.199.245/thinkphp_5.0.24/public/test/abc/eat/who/st4ck |
三、绑定默认模块
在public下的index.php加上
1 | define('BIND_MODULE','test'); |
切记一定要在require __DIR__ . '/../thinkphp/start.php';
之前
上方的url变为
1 | http://192.168.199.245/thinkphp_5.0.24/public/abc/eat/who/st4ck |
如果你的应用比较简单,模块和控制器都只有一个,那么可以在应用公共文件中绑定模块和控制器,如下:
1 | // 绑定当前访问到index模块的index控制器 |
那么url又变成
1 | http://192.168.199.245/thinkphp_5.0.24/public/eat/who/st4ck |
四、设置返回类型
设置为json
1 | 'default_return_type' => 'json', |
五、控制器初始化
1 | 如果你的控制器类继承了\think\Controller类的话,可以定义控制器初始化方法_initialize,在该控制器的方法调用之前首先执行 |
1 | namespace app\index\controller; |
如果访问
http://localhost/index.php/index/Index/hello
会输出
1 | init |
六、数据库操作
前面嘚 use think\Db;
1 | public function get_em() |
或者
1 | public function get_em() |
1 | public function get_em() |
插入数据
1 | public function get_em() |
插入多数据
1 | public function get_em() |
更新数据
1 | Db::table('think_user')->where('id', 1)->update(['name' => 'thinkphp']); |
删除数据
1 | // 根据主键删除 |
七、模型绑定
和传统mvc一样,一个ef框架
先新建一个model
1 |
|
默认优先使用外部设定的数据库,也可以自己拟定
1 |
|
然后controller要使用
1 | public function set_mo() |
前面需要加上
1 | use app\test\model\User; |
修改属性
1 | public function set_mo() |
八、模板
模板路径倒是很奇怪的样子
然后就是一些模板语法
1 | public function fetch1(){ |
1 | Hello,{$name}! |
切换版本
通过以下命令获取测试环境代码:
1 | composer create-project --prefer-dist topthink/think tpdemo |
将 composer.json 文件的 require 字段设置成如下:
"require": {
"php": ">=5.6.0",
"topthink/framework": "5.1.x"
}
```,
然后执行 composer update,获取5.1.x