ThinkPHP5的简单搭建和使⽤详解
0X01 Thinkphp 的安装
我这⾥选择的是使⽤ windows 下的 composer 进⾏安装,收下⾸先下载 composer 这个⼯具,安装完成以后进⼊我们想要创建项⽬的⽂件夹输⼊下⾯的命令
composer create-project topthink/think tp5 dev-master --prefer-dist
这样就会在当前⽬录下形成⼀个名为 tp5 的⽂件夹,这个⽂件夹中存放的就是 thinkphp5 的基本的框架
0X02 重点⽬录结构及⽂件介绍
1.⽬录结构
application : 应⽤⽬录,我们的模型视图控制器都会放在这个⽂件夹下,这是我们开发的主阵地
public : 这个是我们项⽬的⼊⼝⽂件,thinkphp 是⼀个单⼀⼊⼝的框架
thinkphp : 框架的核⼼⽬录
2.关键⽂件
application/config.php 项⽬配置⽂件,开启 debug 调试模式(在开发中)
application/database.php 数据库配置⽂件
public/index.php 项⽬⼊⼝⽂件,定义了应⽤⽬录的位置以及包含框架启动⽂件来启动框架
0X03 配置虚拟主机
f 中判断下⾯是否被注释,如果被注释请取消注释
(1)Include f (2)LoadModule vhost_alias_module modules/mod_vhost_alias.so
2.删除 f 中原有的默认内容,添加如下内容
<VirtualHost *:80>
DocumentRoot "E:\phpstudy\PHPTutorial\WWW\tp5\public"
ServerName localhost
<Directory "E:\phpstudy\PHPTutorial\WWW\tp5\public">
Options FollowSymLinks ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
3.配置 URL 重写
LoadModule rewrite_module modules/mod_rewrite.so
并在虚拟主机配置中写上
AllowOverride All
注意:如果使⽤ phpstudy 的话,官⽅默认的 .htaccess 是不可以的,需要修改成下⾯这个样⼦
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
</IfModule>
0X04 基本的写法
1.控制器的基本写法
(1)模块中的控制器实际上就是⼀个⼀个的类,这个类写的时候要继承 Controller 并且要在前⾯写上命名空间
(2) thinkPHP5 使⽤ return 来返回⼀个html ,⾃动渲染到页⾯上
(3)tp5 使⽤的是 $this->requrst->param() 接受参数,当然也要在开始写上命名空间
⽰例代码:
<?php
namespace app\index\controller;
use think\Controller;
use think\Request;
class Index extends Controller
{
public function index()
{
print_r($this->request->param());
return '<style type="text/css">*{ 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"; }
}
我们这样访问
结果:
2.模板和控制器的关系
每⼀个模块都有⾃⼰的控制器、视图、和模型,访问的时候是按照 index.php/模块/控制器/⽅法,访问的,然后每⼀个控制器在 view 中对应着⼀个同名的⽂件夹,⽐如说 controller/Index 控制器,view/Index 就是这个控制器对应的模板⽂件夹,那么每⼀个⽅法都会在模板⽂件夹下对应⼀个同名的 html ⽂件作为这个⽅法的模板
tp5 是通过
$this->assign('data',$data);
进⾏赋值并通过
return $this->fetch('模板名');
进⾏渲染的
⽰例代码:
index/controller/Index.php
<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
public function index()
{
$data = "K0rz3n";
$this->assign('data',$data);
return $this->fetch();
}
}
Index/view/Index/index.html
<html>
<head>
</head>
<body>
hello {$data}!
</body>
</html>
3.对 SEO 友好的路由
我们知道,我们的搜索引擎抓取页⾯最多抓三层,但是我们刚刚写的那种 URL 已经太多层了,这⾮常不利于搜索引擎的收录,于是 tp5 给我们提供了⼀种简化的⽅法,就是 route.php
⽰例代码:
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']],
];
这个意思就是我们访问 hello/name 就会转给 index/Index/hello ,并且要求是 Get ⽅法,后缀名是 HTML
配置好后我们只要添加这样⼏个东西就 OK 了
public function hello($name = 'zhangsan')
{
$this->assign('name',$name);
return $this->fetch();
}
hello.html
<html>
<head>
</head>
<body>
hello {$name}!
</body>
</html>
如图所⽰:
当然在这种情况下参数名还是会很多斜杠,还是不是很友好,于是我们可以在 config.php 中将默认的斜杠分隔符进⾏修改,改成其他的这样就避免了这个问题
4.URL ⾃动⽣成
tp5 给我们提供了 url() 这个函数帮我们⾃动⽣成 Url
public function url()
{
echo url('url2','a=1&b=2');
}
这个⽅法运⾏的结果就是
/index/index/url2/a/1/b/2.html
5.请求和响应
1.接收请求的参数
通过以下代码可以得到 username
echo $this->request->param('username');
或者我们可以使⽤函数助⼿ input(),下⾯这段代码能达到和上⾯⼀样的效果
echo input('username');
包括我们通过下⾯的代码获取 url
echo $this->request->url();
这个也有⾃⼰的函数助⼿
echo request()->url();
我们可以获分别获取 get post cookie file 等⽅式的参数
$this->request->get()
$this->request->post()
$this->request->cookie()
$this->request->file()
或者实例化⼀个 Request 对象,但是这种⽅法只能接受 url 后⾯是 & 连接的参数,重写的好像不⾏
$Request = Request::instance()
$request->get()
$Rquest->post()
$Request->cookie()
$Request->file()
2.绑定参数
$this->request->bind('user',"hh");
echo $this->request->user;
那么为什么请求还要动态地绑定参数呢?因为很多时候需要传递 session 的值,来维持会话
3.返回值
可以返回多种格式的值⽐如 json xml 或者通过 $this->fetch() 来进⾏模板渲染
return json($data);
return xml($data);
当然我们的 tp 也有对⼀些东西的封装,⽐如实现输出⼀段话然后进⾏跳转到某个⽅法,或者是直接进⾏重定向
php实例代码详解return json($data);
return xml($data);
6.模板与输出
⼀般的模板渲染就不想介绍了,这⾥说下模板布局,其实就是在 view ⽂件夹下有⼀个 layout.html ⽂件,这个⽂件的内容是这样的layout.html
{include file="/index/header"/}
{__CONTENT__}
{include file="/index/footer"/}
然后我们写模板的时候就在最上⾯加上对这个⽂件的引⽤
{layout name="layout"/}
如果我们想全局引⼊页眉页脚,这个配置需要在 config.php 中进⾏设置,在模板配置中添加下⾯的代码
'layout_on' => 'true',
'layout_name' => 'layout',
'layout_item' => '{__CONTENT__}',
这样的话就是进⾏了全配置但是如果我们有些页⾯不想这样配置的话我们需要在这样的页⾯上写上
{__NOLAYOUT__}
如果我们模板⽂件中的静态⽂件路径想要不写死的话,我们可以在 php ⽂件中的 fecth 前设置字符替换
$this->view->replace(['__PUBLIC__' => '/static',]);
如果我们想每个⽅法都使⽤这个操作,我们就把上⾯这段代码放到控制器的构造函数⾥⾯
function __construct(){
parent::__construct();
$this->view->replace(['__PUBLIC__' => '/static',]);
}
0X05 参考
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论