ThinkPHP5.1入门
ThinkPHP5.1入门
===================================
Composer的官方网站:
https://www.phpcomposer.com/
=======================================
Composer的简介:
Composer是PHP用来管理依赖关系的工具。
可以在自己的项目中声明所依赖的外部工具库,
Composer会帮你安装这些依赖的库文件。
=====================================
Composer安装中国全局镜像可以大幅提升国内访问速度。
修改 composer 的全局配置文件:
composer config -g repo.packagist composer https://packagist.phpcomposer.com
===========================================
composer官网有个【安装包列表】,可以找到要下载的安装包。
https://packagist.org/。
然后搜索thinkphp的安装包,输入:topthink。
找到第一个就是,下载命令:
composer create-project topthink/think 项目名称。
=======================================
thinkphp5的入口访问文件是public下的index.php
==============================================
tp5的基本运行流程:
浏览器-->入口文件index.php-->启动脚本start.php-->基础配置base.php
-->自动加载Loader.php-->接收请求Request.php-->返回响应Response.php。
=================================================
tp5.1的配置
相比tp5.0:
1、用config目录取代了config.php文件;
2、一级配置名称就是配置文件的的名称;
3、路由配置route.php完全独立出来了;
4、模块配置与应用配置完全独立不再合并。
=====================================================
tp5的模块名字、控制器的目录名字都是小写;
控制器名字首字母大写,相比tp3.2,命名不需要.class。
tp5的命名空间需要把写三级,即app\模块名字\controller;
tp3.2的命名空间写两级,即模块名字\Controller。
===============================================
获取config的配置项:
配置文件在thinkphp\library\think\Config.php。
而thinkphp\library\think\facade\Config.php把配置项都转成了
静态方式访问。
在控制器中获取配置项:
use think\facade\Config;
//获取所有配置项
dump(Config::get());//获取所有配置项
//获取一级配置项
dump(Config::get('app.'));//获取app文件里的配置项
dump(Config::get('database.'));//获取database文件里的配置项
或者
dump(Config::pull('database');
获取二级配置项(app是默认的一级配置项前缀,可以省略,其他不可以):
dump(Config::get('database.type'));//获取database文件里的配置项数据库类型。
查询配置项是否存在:
dump(Config::has('database.type'));
动态设置配置文件
Config::set('app_debug',true);
================================================
使用助手函数Config(),不依赖Config类,
即不需要使用use think\facade\Config。
//获取所有配置项
dump(config());
//获取一级配置项
dump(config('database.'));
//获取二级配置项
dump(config('database.type'));
//判断配置项是否存在,使用问号
dump(config('?database.type'));
设置配置项
config('database.hostname','localhost');
===================================================
Trait介绍:
自PHP5.4起,PHP实现了一种代码复用的方法,称为trait。
Trait是为类似PHP的单继承语言二准备的一种代码复用机制。
Trait为了减少单继承语言的限制,使开发人员能够自由地在不同
层次结构内独立的类中复用method。
=======================================================
trait实现了代码的复用,突破了单继承的限制;
trait是类,但是不能实例化。
示例:
trait Demo1{
public function hello1(){
return __METHOD__;
}
}
trait Demo2{
public function hello2(){
return __METHOD__;
}
}
class Demo{
use Demo1,Demo2;//继承Demo1和Demo2
public function hello(){
return __METHOD__;
}
public function test1(){
//调用Demo1的方法
return $this->hello1();
}
public function test2(){
//调用Demo2的方法
return $this->hello2();
}
}
$cls = new Demo();
echo $cls->hello();
echo $cls->test1();
echo $cls->test2();
优先级问题:
当当前类和父类、trait类的方法重名后,
当前类>trait>父类。
当多个trait类重名后,就会报错,需要额外处理:
use Demo1,Demo2{
//Demo1的hello替换Demo2的hello方法
Demo1::hello insteadof Demo2;
//Demo2的hello起别名
Demo2::hello as Demo2Hello;
}
================================================
容器(注册树)和依赖注入
容器用来更方便地管理类依赖即运行依赖注入。
容器用来进行类管理,还可以将类的实例(对象)作为参数,
传递给类方法,自动触发依赖注入;
依赖注入:将对象类型的数据,以参数的方式传递到方法的参数列表。
public function getMethod(\app\home\Index $index){
}
参数\app\home\Index $index相当于$index=new \app\home\Index;
会触发依赖注入。
依赖注入是实例化对象参数的技术。
====================================================
容器:
把一个类放到容器中:
\think\Container::set('temp','\app\home\Index');
//使用助手函数bind('temp','\app\home\Index');
$temp = \think\Container::get(abstract:'temp',['param1'=>'123']);
//或者使用助手函数app('temp',['param1'=>'123']);
return $temp->getName();
把一个闭包Closure放到容器(闭包可以理解为匿名函数)
\think\Container::set('temp',function($domain){
return 'PHP'.$domain;
});
return \think\Container::get('temp',['domain'=>'123']);
=========================================================
Facede门面,门面为容器中的类提供了一个静态调用的接口,相比于传统
的静态方法调用,带来了更好的可测试性和扩展性,可为任何的非静态类库
定义一个facade类。
想要静态方式访问一个动态方法,就需要给当前类绑定一个静态代理的类。
静态代理类就是think\facade.php。
class Test extends \think\Facade{
protected static function getFacadeClass(){
return 'think\Myself';//要代理的类
}
}
动态绑定:
\think\Facade::bind('app\home\Test','think\Myself');
===============================================================
tp5正常情况下,控制器不依赖父类Controller.php;
推荐继承父类,可以很方便的使用在父类中封装好的方法和属性;
Controller.php没有静态代理;
控制器的输出,字符串用return;复杂类型用dump();
==============================================================
Request请求:
方法一(直接实例化Request类):
$request = new \think\Request();
dump($request->get());
方法二(使用facade静态代理):
$request = new \think\facade\Request();
dump($request::get());//这样可以静态调用动态方法
方法三(依赖注入Request $request):
use think\Request;
public function test(Request $reques){
dump($request->get());
}
方法四(继承Controller类):
class Test extends \think\Controller{
public function demo(){
dump($this->request->get());
}
}
===============================================================
连接数据库:
方法一(使用全局配置config/database.php):
Db::table('user')->where('id',1)->value('name');
方法二(动态链接数据库):
Db::connect([
'type'=>'msyql',
'hostname'=>'localhost',
'database'=>'demo',
'username'=>'root',
'password'=>'123456',
])->table('user')->where('id',1)->value('name');
方法三(DSN连接):
$dsn = 'mysql://root:123456@localhost:3306/demo#utf8';
Db::connect($dsn)->table('user')->where('id',1)->value('name');
==============================================================
config目录下的配置文件:
如果要指定一个模块的配置文件,可以在config目录下,创建一个和模块
名字相同的目录,在目录下写一个配置文件,
示例:
默认config目录下有个database.php的全局数据库配置文件,
如果在config目录下新建一个index\database.php,这个数据库配置文件
就只对index模块有效。
=============================================================
数据库操作:
find(),单条查询,查询不到返回null;
findOrEmpty(),单条查询,查询不到返回空数组;
field(),指定返回的字段;
table(),选择数据表;
select(),返回多条数据;
where(),查询条件,示例where([['course','=','php'],['grade','>=',80]]);
value(),返回个字段,单个值。
column(),返回某一列的值。
column('name','id'),返回name列的值,并以id为索引。
insert(),添加一条数据;
Db::table('user')->data($add_data)->insert();
返回新增id:
Db::table('user')->data($add_data)->insertGetId();
insertAll(),插入多条数据。
update(),更新操作,必须有where条件。
delete(),删除操作。
原生sql,使用query()查询和execute()更新添加删除;
$sql = "select id,name from user";
Db::query($sql);
======================================================================
模型是和数据表绑定的,
use app\index\model\User;
User::get(1);//获取id为1的数据。
User::field('id,name')->where('id',9)->find();
User::all();//获取多条记录
=================================================================
模板赋值与变量输出
$content='PHP CSS';
return $this->display($content);
使用view();
return $this->view->display($content);//$this->view是controller的方法。
或者
use think\facade\View;
return View::display($content);
//使用视图将数据进行输出fetch():
$this->view->assign('name','zhang san');//赋值
$this->view->assign(['name'=>'zhang san','age'=>2]);//批量赋值
return $this->view()->fetch();
模板中使用传递的变量:
{$name}
{//这是注释}
{$order.id}
{$order['id']}
==========================================
创建对象
$obj = new \stdClass();
$obj->id = 1;
$obj->name = 'PHP';
$this->view->assign('info',$obj);//批量赋值
return $this->view()->fetch();
模板中使用:
{$info->id}
=================================
模板中使用常量:
{$Think.const.SITE_NAME}
{$Think.const.PHP_VERSION}
模板中使用系统变量:
{$Think.server.php_self}
{$Think.server.session.id}
{$Think.server.get.id}
模板中获取配置:
{$Think.config.database.hostname}
获取请求变量
{$Request.get.name}
{$Request.path}
{$Request.root} //值为/index.php
{$Request.root.true} //值为http://localhost/index.php
==================================================================
laravel中的take相当于limit();
==================================================================
ThinkPHP5.1入门的更多相关文章
- ThinkPHP5 快速入门文档
一. 5.0版本采用模块化的设计架构,默认的应用目录下面只有一个index模块目录,如果我要添加新的模块可以使用控制台命令来生成. 切换到命令行模式下,进入到应用根目录并执行如下指令: php thi ...
- ThinkPHP5 的入门学习
与Tp3.2相比,有一下的不同: (1)目录名称的改变: tp3.2的目录命名首字母皆为大写,例如:Application.Public.Controller.Model.View.ThinkPHP. ...
- ThinkPHP5项目目录
ThinkPHP5安装后(或者下载后的压缩文件解压后)可以看到下面的目录结构: tp5├─application 应用目录 ├─extend 扩展类库目录(可定义) ├─pu ...
- thinkphp5在URL地址里隐藏模块名
新的Thinkphp5的路由功能很强大,完全可以自定义以满足自己的要求 ThinkPHP5.0的路由规则如下:http://serverName/index.php/module/controll ...
- ThinkPHP5项目目录规划实践
ThinkPHP5安装后(或者下载后的压缩文件解压后)可以看到下面的目录结构: tp5├─application 应用目录 ├─extend 扩展类库目录(可定义) ├─pu ...
- ThinkPHP5.0、5.1和6.0教程文档合集(免费下载)
我们都知道ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架. ThinkPHP6主要更新了什么呢? 1. 支持PHP最新的强类型 2. PSR开发规范得了更广泛的应用 3. ...
- wamp设置自定义域名访问php网站
wamp是一个在window系统下很不错的php开发套件,一般我都是使用此套件在本地进行开发和测试的 特别是alias功能特别好,可以同时开发N个php网站而不互相影响 但alias有一个问题,它其实 ...
- TP3.2.x判断手机端访问并设置默认访问模块的方法 - ThinkPHP框架
手机端访问时调用Wap手机模块,实现在手机端访问时展示出手机网站,无需跳转域名首先我们在./Application/Common/Conf/ 目录下建立两个公共配置文件:config.php 和con ...
- 《Thinkphp5使用Socket服务》 入门篇
上车啦!!! 今天来说一下thinkphp5.0下使用wokerman的socket服务. 安装: composer的安装方法,Windows下直接下个composer的应用程序,双击安装,环境变量同 ...
随机推荐
- POJ2402 Palindrome Numbers第K个回文数——找规律
问题 给一个数k,给出第k个回文数 链接 题解 打表找规律,详见https://www.cnblogs.com/lfri/p/10459982.html,差别仅在于这里从1数起. AC代码 #inc ...
- webpack打包性能分析
1. 如何定位webpack打包速度慢的原因 首先需要定位webpack打包速度慢的原因,才能因地制宜采取合适的方案,我们可以在终端输入: webpack --profile --json > ...
- druid 配置WebStatFilter 网络统计以及监控
WebStatFilter用于采集web-jdbc关联监控的数据. web.xml配置 <filter> <filter-name>DruidWebStatFilter< ...
- 苹果电脑macbook怎样强制关闭软件
尝试快捷键Command+Q 选择当前处于界面最前端的应用,同时按住Command+Q退出程序,并不代表强制退出应用,主要用于一些假死的应用. 2 通过快捷键Command+option+Shift+ ...
- awk日志分割
awk日志分割 1. awk实现日志按照日期分割 #!/bin/bash DATE=$(date -d yesterday +%Y-%m-%d) awk 'BEGIN{RS="'$DATE ...
- 使用一位数组解决 1 1 2 3 5 8 13 数列问题 斐波纳契数列 Fibonacci
斐波纳契数列 Fibonacci 输出这个数列的前20个数是什么? 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 使用数组实现输出数列的前30 ...
- CS193p Lecture 6 - UINavigation, UITabBar
抽象类(Abstract):指的是这个类不能被实例化,只能被继承: OC中没有关键词来标明某个类是抽象类,只能在注释中标注一下: 抽象类中的抽象方法,必须是public的,使方法称为public的方法 ...
- ES6新数据类型map与set
一.map,简单的键值对映射,具有很快的查找速度 1. 初始化map,map的键名可以使用其他数据类型,对象的属性名只能使用字符串或symbol 使用二维数组 var m = new Map([['n ...
- Jquery 自定义动画同步进行如何实现?
需求描述:我需要对不懂的两个HTML对象进行操作,同时开始动画,同时结束动画. 遇到问题:如果先后对连个对象进行 animate动画,那么第一个会先运行,等第一个运行完了运行第二个,这样就不同步了. ...
- One-to-one
创建模型 在本例中,Place 和 Restaurant 为一对一关系 from django.db import models class Place(models.Model): name = m ...