首页 » PHP » 正文

thinkphp5学习笔记(1)

1、默认程序入口文件 public/index.php

官方提供的application目录结构说明:

qq%e5%9b%be%e7%89%8720161206112832

新建模块,

php think build --module demo

为调试方便,把index.php从public目录移至根目录。然后修改index.php的内容,更改路径如下:

// 定义应用目录
define('APP_PATH', __DIR__ . '/application/');
// 加载框架引导文件
require __DIR__ . '/thinkphp/start.php';

这样就可以直接访问tp5所在目录。

2、开启调试模式,修改应用配置文件( application/config.php )中的app_debug 配置参数:

// 关闭调试模式
'app_debug' => true,

3、hello world

找到index模块的Index控制,修改内容如下(文件位于 application/index/controller/Index.php):

<?php
namespace app\index\controller;
class Index
{
public function index()
{
return 'Hello,World!';
}
}
注意:根据类的命名空间可以快速定位文件位置,在 ThinkPHP5.0 的规范里面,命名空间其实对应了文件的所
在目录, app 命名空间通常代表了文件的起始目录为 application ,而 think 命名空间则代表了文
件的其实目录为 thinkphp/library/think ,后面的命名空间则表示从起始目录开始的子目录。

如果要继承一个公共的控制器类,使用use app\index\controller\Base;

也可以为上边的index方法定义一个参数,比如:

<?php
namespace app\index\controller;
class Index 
{
    public function index($name = 'world')
    {
        return "Hello ".$name."!";
    }
}

此时访问http://192.168.0.102/tp5/?name=fish ,结果显示Hello fish!

4、 protected 或者 private 类型的话,是无法直接通过URL访问到该操作的,也就是说只有 public 类型的操作才是可以通过URL访问的。修改上边的类如下:

<?php
namespace app\index\controller;
class Index
{
public function hello()
{
return 'hello,thinkphp!';
}
public function test()
{
return '这是一个测试方法!';
}
protected function hello2()
{
return '只是protected方法!';
}
private function hello3()
{
return '这是private方法!';
}
}

此时访问以下地址,前两个正常,后两个异常,会提示你方法不存在
http://192.168.0.102/tp5/index.php/index/index/hello
http://192.168.0.102/tp5/index.php/index/index/test
http://192.168.0.102/tp5/index.php/index/index/hello2
http://192.168.0.102/tp5/index.php/index/index/hello3

5、现在我们在给控制器添加视图文件功能,我们在 application/index 目录下面创建一个 view 目录,然
后添加模板文件 view/index/hello.html ,我们添加模板内容如下:

<html>
<head>
<title>hello {$name}</title>
</head>
<body>
hello, {$name}!
</body>
</html>

要输出视图,必须在控制器方法中进行模板渲染输出操作,现在修改控制器类如下:

<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
public function hello($name = 'thinkphp')
{
$this->assign('name', $name);
return $this->fetch();
}
}
重要:这里使用了 use 来导入一个命名空间的类库,然后可以在当前文件中直接使用该别名而不需要使用完整
的命名空间路径访问类库。也就说,如果没有使用
use think\Controller;
就必须使用
class Index extends \think\Controller
这种完整命名空间方式。
在后面的内容中,如果我们直接调用系统的某个类的话,都会假设已经在类的开头使用 use 进行了别名导入。

注意, Index 控制器类继承了 think\Controller 类之后,我们可以直接使用封装好的 assign 和
fetch 方法进行模板变量赋值和渲染输出。

fetch 方法中我们没有指定任何模板,所以按照系统默认的规则(视图目录/控制器/操作方法)输出了
view/index/hello.html 模板文件。

现在访问http://192.168.0.102/tp5/index.php/index/index/hello,会输出hello,thinkphp!

6、读取数据库

在开始之前,我们首先在数据库 demo 中创建一个 think_data 数据表

CREATE TABLE IF NOT EXISTS `think_data`(
`id` int(8) unsigned NOT NULL AUTO_INCREMENT,
`data` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
INSERT INTO `think_data`(`id`,`data`) VALUES
(1,'thinkphp'),
(2,'php'),
(3,'framework');

首先我们需要在应用的数据库配置文件 application/database.php 中添加数据库的连接信息如下:

return [
// 数据库类型
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'demo',
// 数据库用户名
'username' => 'root',
// 数据库密码
'password' => '',
// 数据库连接端口
'hostport' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => 'think_',
// 数据库调试模式
'debug' => true,
];

接下来,我们修改下控制器方法,添加读取数据的代码:

<?php
namespace app\index\controller;
use think\Controller;
use think\Db;
class Index extends Controller
{
public function index()
{
$data = Db::name('think_data')->find();
$this->assign('result', $data);
return $this->fetch();
}
}

定义好控制器后,我们修改模板文件,添加数据输出标签如下:

<html>
<head>
<title></title>
</head>
<body>
{$result.id}--{$result.data}
</body>
</html>

模板标签的用法和 Smarty 类似,就是用于输出数据的字段,这里就表示输出 think_data 表的 id 和
data 字段的值。
我们访问会输出:
1–thinkphp

博主的文章或程序如果给您带来了价值,感谢您打赏一二
微信扫码支付 支付宝扫码支付

发表评论