===================================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
相关资源:ThinkPHP5.1 框架下 PhpSpreadsheet 操作 Excel 表的导入导出.rar