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();
==================================================================

 

转载于:https://www.cnblogs.com/gyfluck/p/9994105.html

你可能感兴趣的:(php,数据库)