namespace只对类、函数、常量(const定义的,不是define定义的)
实验:
1、 在默认命名空间下命名两个同名函数,访问页面
2、 在不同命名空间下定义两个同名常量,由define定义,访问页面
3、 在不同命名空间下定义两个同名常量,由const定义,访问页面不报错
4、 直接调用(不加命名空间)一个在不同名空间存在的同名函数,由代码位置决定命名空间,访问页面:
(这里由于getmsg()跟在命名空间space2后面,所以调用的是命名空间space2中的getmsg()函数,常量同理)
5、 调用指定命名空间下的方法,访问网页:
不指定命名空间,示例:getmsg();
以/开头访问,类似绝对路径,示例:/space/space1/getmsg();
没有以/开头,类似相对路径,相对于该代码所在命名空间,示例:space2/getmsg();
在namespace前不可以有任何有效的语句,除
header(“content-type:text/html;charset=utf-8”);
示例:
示例:
官方文档中对自动生成功能的介绍: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中的配置一一对应,到这里,自动生成功能就可以使用了。
接着编写控制器,下面有两种方式,通常使用第一种。
html文件放到application目录下对应模块的view\Index下(view要小写,Index首字母大写)
设置输出替换,如果修改application下的config.php,则对整个应用生效
浏览器访问:http://127.0.0.1/youme/public/index.php/index/index/
成功页面如下:
可以将一些复用度高、公用的的代码,抽取成单独的html文件,集合成一个public目录。再使用{include file=”路径” /}; 进行包含。
示例:{include file=”Public/top” /}; //表示将Public目录下的名为top的文件包含进来。
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方法。
1))}”> //表示跳转到当前模块的cate控制器下的lst方法,并带参数id=1,这里参数使用数组形式传递。
在application目录下的database.php中配置连接数据库的相关信息
以插入记录为例:调用think命名空间下的Db类的相关方法,插入一条记录
官网中介绍了两种数据校验的方法,一种是独立校验,另一种是适用验证器校验。
在任何时候,都可以使用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)方法进行校验。
为具体的验证场景或者数据表定义好验证器类,直接调用验证类的check
方法即可完成验证,下面是一个例子:
我们定义一个\app\index\validate\User
验证器类用于User
的验证。
namespace app\index\validate;
use think\
Validate;
class User extends Validate
{
protected $rule = [
//
非空且最大长度为
25
'nam
e' =>
'require|max:
25',
'emai
l' =>
'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());
}