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入门的更多相关文章

  1. ThinkPHP5 快速入门文档

    一. 5.0版本采用模块化的设计架构,默认的应用目录下面只有一个index模块目录,如果我要添加新的模块可以使用控制台命令来生成. 切换到命令行模式下,进入到应用根目录并执行如下指令: php thi ...

  2. ThinkPHP5 的入门学习

    与Tp3.2相比,有一下的不同: (1)目录名称的改变: tp3.2的目录命名首字母皆为大写,例如:Application.Public.Controller.Model.View.ThinkPHP. ...

  3. ThinkPHP5项目目录

    ThinkPHP5安装后(或者下载后的压缩文件解压后)可以看到下面的目录结构: tp5├─application     应用目录 ├─extend          扩展类库目录(可定义) ├─pu ...

  4. thinkphp5在URL地址里隐藏模块名

    新的Thinkphp5的路由功能很强大,完全可以自定义以满足自己的要求   ThinkPHP5.0的路由规则如下:http://serverName/index.php/module/controll ...

  5. ThinkPHP5项目目录规划实践

    ThinkPHP5安装后(或者下载后的压缩文件解压后)可以看到下面的目录结构: tp5├─application     应用目录 ├─extend          扩展类库目录(可定义) ├─pu ...

  6. ThinkPHP5.0、5.1和6.0教程文档合集(免费下载)

    我们都知道ThinkPHP是一个免费开源的,快速.简单的面向对象的轻量级PHP开发框架. ThinkPHP6主要更新了什么呢? 1. 支持PHP最新的强类型 2. PSR开发规范得了更广泛的应用 3. ...

  7. wamp设置自定义域名访问php网站

    wamp是一个在window系统下很不错的php开发套件,一般我都是使用此套件在本地进行开发和测试的 特别是alias功能特别好,可以同时开发N个php网站而不互相影响 但alias有一个问题,它其实 ...

  8. TP3.2.x判断手机端访问并设置默认访问模块的方法 - ThinkPHP框架

    手机端访问时调用Wap手机模块,实现在手机端访问时展示出手机网站,无需跳转域名首先我们在./Application/Common/Conf/ 目录下建立两个公共配置文件:config.php 和con ...

  9. 《Thinkphp5使用Socket服务》 入门篇

    上车啦!!! 今天来说一下thinkphp5.0下使用wokerman的socket服务. 安装: composer的安装方法,Windows下直接下个composer的应用程序,双击安装,环境变量同 ...

随机推荐

  1. WPF知识点全攻略10- 路由事件

    路由事件是WPF不得不提,不得不会系列又一 先来看一下他的定义: 功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件. 实现定义:路由事件是一个 C ...

  2. 传统BP对比CNN

    传统BP vs CNN 存在2个问题 传统BP网络存在的问题: 权值太多,计算量太大 权值太多,需要大量样本进行训练 传统的BP来处理图像问题的话因为计算权值太多太大. 网络的建立要根据数据的大小来建 ...

  3. javase(4)_数组

    一.数组概述 数组可以看成是多个相同类型数据组合,对这些数据的统一管理. 数组变量属于引用类型,数组也可以看成对象,数组中的每个元素相当于该对象的成员变量. 数组中的元素可以是任意类型,包括基本类型和 ...

  4. swift中使用sqlite3

    import Foundation /** 1. 打开数据库 2. 如果没有数据表,需要首先创表 3. 数据操作 */ class SQLite { var db: COpaquePointer = ...

  5. [LUOGU] 2820 局域网

    题目背景 某个局域网内有n(n<=100)台计算机,由于搭建局域网时工作人员的疏忽,现在局域网内的连接形成了回路,我们知道如果局域网形成回路那么数据将不停的在回路内传输,造成网络卡的现象.因为连 ...

  6. 文件操作-touch

    本文来给大家介绍另外一个比较常用的命令--touch命令,Linux touch命令 主要用来修改文件或者目录的时间属性,或者建立新文件. 转载自https://www.linuxdaxue.com/ ...

  7. leepcode作业解析 - 5-19

    18.两数之和II -输入有序数组 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 ...

  8. Struts2之初体验

    Struts21.了解Struts2 请求调度框架Struts2是一个MVC框架Struts2类库:Struts2-core Struts2核心XWork-core xwork核心 Struts2的构 ...

  9. checkStyle使用手册

    1. Annotations(注解:5个) Annotation Use Style(注解使用风格) 这项检查可以控制要使用的注解的样式. Missing Deprecated(缺少deprecad) ...

  10. magic mouse 2 在Mac上灵敏度太低的解决办法

    1.打开终端 2.输入以下代码查看当前鼠标移动速度 defaults read -g com.apple.mouse.scaling 你会看到输出的是 “3”,这是初始速度 3.输入以下代码改变鼠标移 ...