zoukankan      html  css  js  c++  java
  • 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的配置项:
    配置文件在thinkphplibrary hinkConfig.php。
    而thinkphplibrary hinkfacadeConfig.php把配置项都转成了
    静态方式访问。
    在控制器中获取配置项:
    use thinkfacadeConfig;

    //获取所有配置项
    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 thinkfacadeConfig。
    //获取所有配置项
    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(apphomeIndex $index){

    }
    参数apphomeIndex $index相当于$index=new apphomeIndex;
    会触发依赖注入。
    依赖注入是实例化对象参数的技术。
    ====================================================
    容器:
    把一个类放到容器中:
    hinkContainer::set('temp','apphomeIndex');
    //使用助手函数bind('temp','apphomeIndex');

    $temp = hinkContainer::get(abstract:'temp',['param1'=>'123']);
    //或者使用助手函数app('temp',['param1'=>'123']);

    return $temp->getName();


    把一个闭包Closure放到容器(闭包可以理解为匿名函数)
    hinkContainer::set('temp',function($domain){
    return 'PHP'.$domain;
    });

    return hinkContainer::get('temp',['domain'=>'123']);
    =========================================================
    Facede门面,门面为容器中的类提供了一个静态调用的接口,相比于传统
    的静态方法调用,带来了更好的可测试性和扩展性,可为任何的非静态类库
    定义一个facade类。
    想要静态方式访问一个动态方法,就需要给当前类绑定一个静态代理的类。
    静态代理类就是thinkfacade.php。
    class Test extends hinkFacade{
    protected static function getFacadeClass(){
    return 'thinkMyself';//要代理的类
    }
    }
    动态绑定:
    hinkFacade::bind('apphomeTest','thinkMyself');
    ===============================================================
    tp5正常情况下,控制器不依赖父类Controller.php;
    推荐继承父类,可以很方便的使用在父类中封装好的方法和属性;
    Controller.php没有静态代理;
    控制器的输出,字符串用return;复杂类型用dump();
    ==============================================================
    Request请求:
    方法一(直接实例化Request类):
    $request = new hinkRequest();
    dump($request->get());

    方法二(使用facade静态代理):
    $request = new hinkfacadeRequest();
    dump($request::get());//这样可以静态调用动态方法

    方法三(依赖注入Request $request):
    use thinkRequest;
    public function test(Request $reques){
    dump($request->get());
    }

    方法四(继承Controller类):
    class Test extends hinkController{
    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目录下新建一个indexdatabase.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 appindexmodelUser;
    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 thinkfacadeView;
    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();
    ==================================================================

  • 相关阅读:
    Nginx安装详细指南
    git 常用命令
    oracle server config
    CentOS6.5下安装oracle11gR2
    oracle query
    oracle function
    oracle note
    正则表达
    DOM&BOM的起源、方法、内容、应用
    sticky
  • 原文地址:https://www.cnblogs.com/gyfluck/p/9994105.html
Copyright © 2011-2022 走看看