ThinkPHP5.0学习(一)

1.命名空间

namespace只对类、函数、常量(const定义的,不是define定义的)

 

实验:

1、  在默认命名空间下命名两个同名函数,访问页面

2、  在不同命名空间下定义两个同名常量,由define定义,访问页面

 

3、  在不同命名空间下定义两个同名常量,由const定义,访问页面不报错

4、  直接调用(不加命名空间)一个在不同名空间存在的同名函数,由代码位置决定命名空间,访问页面:

(这里由于getmsg()跟在命名空间space2后面,所以调用的是命名空间space2中的getmsg()函数,常量同理)

5、  调用指定命名空间下的方法,访问网页:

 

 

2.多级命名空间以及三种访问方式

2.1非限定名称访问方式

不指定命名空间,示例:getmsg();

2.2、限定名称访问方式

以/开头访问,类似绝对路径,示例:/space/space1/getmsg();

2.3、完全限定名称访问方式

没有以/开头,类似相对路径,相对于该代码所在命名空间,示例:space2/getmsg();

 

在namespace前不可以有任何有效的语句,除

2.4、设置编码格式

          header(“content-type:text/html;charset=utf-8”);

3.命名空间的引入

3.1通过use namespace;的格式引用指定命名空间。

示例:

3.2通过use namespace;的格式引用指定命名空间。

示例:

 

 

4.文件/目录自动生成功能

官方文档中对自动生成功能的介绍:ThinkPHP5.0具备自动创建功能,可以用来自动生成需要的模块及目录结构和文件等,自动生成主要调用\think\Build类库。

 

下载框架后解压出来后,可以看到框架中默认有一个build.php,内容如下:

 

开发手册中对于这段代码的解释是这样的:

自动生成以APP_PATH为起始目录,__dir__  __file__ 表示需要自动创建目录和文件,其他的则表示为模块自动生成。

模块的自动生成则以 APP_PATH.'模块名/' 为起始目录。

并且会自动生成模块的默认的Index访问控制器文件用于显示框架的欢迎页面。

 

这是什么意思呢?APP_PATH又是指向哪里呢?现在我们打开public目录下的index.php入口文件,内容如下:

 

在这里我们能够看到,APP_PATH是入口文件中定义的一个路径,指向当前目录的上一级目录的application文件夹,也就是说,我们自动生成的文件和目录都是生成在APP_PATH所指向的目录下。

 

那么如何自动生成呢?开发手册里提供了3种方法,这里我只介绍最后一种,也是最常用的一种-----直接调用\think\Build类的方法进行自动生成。

 

我们先把build.php移动到application目录下,再打开public目录下的index.php入口文件,加上以下代码:

$build = include APP_PATH.'build.php'; //读取自动生成定义文件

\think\Build::run($build); //运行自动生成

 

 

注意:这里再调用Build类的run方法时,需要指定命名空间。

 

然后浏览器访问:http://127.0.0.1/youme/public/index.php

 

如果成功访问(看到微笑页面),我们可以看到application文件夹下多出来一个目录。

我们可以发现生成的demo模块下文件以及文件夹与build.php中的配置一一对应,到这里,自动生成功能就可以使用了。

 

5.引入前台模板

5.1图片和模板等放到public\static\index目录下

 

 

接着编写控制器,下面有两种方式,通常使用第一种。

 

 

 

 html文件放到application目录下对应模块的view\Index下(view要小写,Index首字母大写)

 

设置输出替换,如果修改application下的config.php,则对整个应用生效

 

浏览器访问:http://127.0.0.1/youme/public/index.php/index/index/

成功页面如下:

 

5.2前端模板的分离

可以将一些复用度高、公用的的代码,抽取成单独的html文件,集合成一个public目录。再使用{include file=”路径” /}; 进行包含。

示例:{include file=”Public/top” /}; //表示将Public目录下的名为top的文件包含进来。

5.3使用url助手函数进行跳转

1.     /**

2.      * Url生成

3.      * @param string        $url 路由地址

4.      * @param string|array  $vars 变量

5.      * @param bool|string   $suffix 生成的URL后缀

6.      * @param bool|string   $domain 域名

7.      * @return string

8.      */

9.     url($url = '', $vars = '', $suffix = true, $domain = false)

 

 

url(控制器/方法名)

 

示例:   //表示跳转到当前模块的cate控制器下的lst方法。

  //表示跳转到当前控制器下的lst方法。

1))}”>   //表示跳转到当前模块的cate控制器下的lst方法,并带参数id=1,这里参数使用数组形式传递。

5.4数据库连接

在application目录下的database.php中配置连接数据库的相关信息

 

以插入记录为例:调用think命名空间下的Db类的相关方法,插入一条记录

 

5.5数据校验

官网中介绍了两种数据校验的方法,一种是独立校验,另一种是适用验证器校验。

 

5.5.1独立校验

在任何时候,都可以使用Validate类进行独立的验证操作,例如:

 

$validate = newValidate([

    'name' => 'require|max:25',

    'email' => 'email'

]);

$data = [

    'name' => 'thinkphp',

    'email' => '[email protected]'

];

if (!$validate->check($data)) {

   dump($validate->getError());

}

 

 

通过构造一个带指定规则的validate实例,调用该实例的check($data)方法进行校验。

 

 

5.5.2验证器校验(5.0推荐)

为具体的验证场景或者数据表定义好验证器类,直接调用验证类的check方法即可完成验证,下面是一个例子:

我们定义一个\app\index\validate\User验证器类用于User的验证。

 

namespace app\index\validate;
 
use think\Validate;
 
class User extends Validate
{
protected $rule = [
     //非空且最大长度为25
        'name'  =>  'require|max:25',
        'email' =>  'email',
];
//配置错误信息
     protected $message = [
    'name.require' => '名称必须',
    'name.max'     => '名称最多不能超过25个字符',
    'age.number'   => '年龄必须是数字',
    'age.between'  => '年龄必须在1~120之间',
    'email'        => '邮箱格式错误',
];
 
}

 

在需要进行User验证的地方,添加如下代码即可:

 

$data = [
    'name'=>'thinkphp',
    'email'=>'[email protected]'
];
//这里只搜索当前模块下的验证器
$validate = \think\Loader::validate('User');
 
if(!$validate->check($data)){
         //getError()获得错误信息
    dump($validate->getError());
}

 

你可能感兴趣的:(ThinkPHP学习)