zoukankan      html  css  js  c++  java
  • laravel 5.6初学笔记

    laravel 5.6初学笔记

    http://note.youdao.com/noteshare?id=bf4b701b49dd035564e7145ba2d978b4
    框架简介
    * laravel文档齐全 * 社区活跃 * 后期维护好,强大的工具 ---
    下载安装
    • 环境要求,php版本在7以上(要与框架所需一致)
    • 集成环境,建议使用laralgon(适应laravel框架开发)
    • 安装可使用conposer(自行看官方文档),也可在laravel学院下载一键安装包(不用再配置环境和下载安装依赖)
    • 环境配置根目录要指向项目目录中的public
    项目目录
    - app/Http/Controllers [控制器存放的位置,MVC中的C] - bootstrap 包含框架启动和自动加载配置的文件(app.php和autoload.php) - config 包含所有应用程序的配置文件(缓存数据库队列) - database 包含数据库的迁移和数据填充文件 - public 包含入口和项目静态资源文件(js,cs) - resources/view 包含了视图和原始的资源文件 - routes 路由入口文件目录 - storage 包含了编译后的模板文件和缓存文件,日志文件 - tests 单元测试目录文件 - vendor 加载的依赖模块 ---
    路由
    • 概括 将用户的请求转发给相应的程序进行处理,建立程序和url之间的映射。
    • laravel 中的请求方式有:get post put pacth any
      delete
    // 基础路由 get
    // http://localhost/testGet
    Route::get('testGet', function(){
        return 'HELLO WORLD';
    });
    
    // 基础路由 post
    Route::post('testPost', function (){
        return 'Hello Post';
    });
    
    // 多请求路由 match
    // http://localhost/testMatch
    Route::match(['get','post'],'testMatch', function (){
        return 'Hello match';
    });
    
    // 多请求路由 any
    // http://localhost/testAny
    Route::any('testAny', function(){
        return 'Hello any';
    });
    
    // 路由参数
    // http://localhost/testGetUser/12
    /*Route::get('testGetUser/{id}', function ($id){
        return 'testGetUserId='.$id;
    });*/
    
    /*// 路由参数
    // http://localhost/testGetUser/name
    Route::get('testGetUser/{name?}', function ($name = 'NULL'){
        return 'testGetUserName='.$name;
    })->where('name','[A-za-z]+')*/;
    
    // 路由参数
    // http://localhost/testGetUser/1/name
    /*Route::get('testGetUser/{id}/{name?}', function ($id, $name = 'NULL'){
        return 'id='.$id.'testGetUserName='.$name;
    })->where(['id'=>'[0-9]+','name'=>'[A-za-z]+']);*/
    
    // 路由别名[为整个路由取别名]
    // http://localhost/testGetUser/center
    Route::get('testGetUser/center',['as' => 'center', function(){
       return  route('center');
    }]);
    
    // 路由群组
    // http://localhost/member/testAny
    Route::group(['prefix' => 'member'], function (){
        Route::any('testAny', function(){
            return 'Hello member-any';
        });
    });
    
    // 路由中输出视图
    // http://localhost/view
    Route::get('view', function (){
       return view('welcome');
    });
    
    

    一次访问周期 【流程】
    * 入口 public/index.php * 创建服务器容器(用于管理类依赖和执行依赖注入的工具) * 发送请求到http内核和consle内核(分别用来处理web请求和 Artisan命令) * 内核启动载入服务提供者,注册提供者,服务提供者启动lavavel框架中的各种重要组件(例如,数据库,路由,队列,验证器)【最为重要的部分】。 * 请求教友路由器进行分发,并运行路由器制定的中间件。
    服务器容器
    * 概括:用于管理依赖和执行依赖注入的工具 * 绑定:几乎所有的服务器容器都在服务提供者中完成的
    门面
    * 概括:门面就是为容器对象提供一个访问方式的类
    中间件
    * 概括:中间件为过滤进入应用的HTTP请求提供了一套便利的机制。 * 用法:
    一,类似于tp框架中的Behavior,或钩子的用法。用于请求的前期验证或后期验证处理。
    二,CORS 中间件可以用于,请求方法增加请求头。
    三,日志中间件可以记录所有进入站点的请求。
    * 中间件组:更为快捷的实现一次分配给路由多个中间件组;指定一个中间键名将相关中间件放到一个组里。 * 中间件参数,中间件可以传递额外的自定义参数。 * 终端中间件,用于请求完成之后的善后操作。
    CSRF保护
    * 概括:跨站请求伪造,通过伪装成授权用户去访问攻击网站的恶意漏洞。 * lavavel自带CSRF中间件,会自动为应用授权保护的有效用户会话创建一个CSRF令牌,并存在session中,用于验证授权用户和访问用户是否是同一个人。
    控制器[MVC中的C]
    • 路由指向控制器[同理:其它请求方式做相应更改]
    // http://localhost/testController
    Route::get('testController', 'TestController@testController');
    
    • 路由取别名[可以通过route('testInfo'),获取路由地址]
    Route::get('testController',[
        'uses' => 'TestController@testController',
        'as' => 'testInfo',
    ]);
    
    • 参数绑定
    // [路由文件]http://localhost/testController/1
    Route::get('testController/{id}',['uses' => 'TestController@testController']);
    
    <?php
    /**
     * Created by PhpStorm.
     * User: admin
     * Date: 2018/6/5
     * Time: 15:45
     */
    namespace  AppHttpControllers;
    
    class  TestController extends  Controller
    {
        // [控制器文件] TEST
        public function testController ($id)
        {
            return 'id-'.$id;
    //        return route('testInfo');
    //        phpinfo();
        }
    }
    

    // 参数验证

    // http://localhost/testController/1
    Route::get('testController/{id}',['uses' => 'TestController@testController'])
    ->where('id', '[0-9]');
    
    视图
    • 位置,resources/views
    • 创建新视图时,按控制器名创建新文件夹
    // 新建视图文件testview.php,输出testview php
    // 控制器输出 return view('testview');
    
    
    • 模板传参
    // controller文件
    public function testController ($id)
        {
            return view('test/test',[
                'id' => $id
            ]);
        }
    
    • 视图文件显示
    test/test blade
    {{$id}}
    
    模型
    • 位置 app根目录
    • 模型文件
    <?php
    /**
     * Created by PhpStorm.
     * User: admin
     * Date: 2018/6/5
     * Time: 17:37
     */
    namespace App;
    use IlluminateDatabaseEloquentModel;
    
    class Test extends Model
    {
        public static function getTestInfo () {
            return 'THIS IS A GOOD IDEA';
        }
    }
    
    • controller 文件
      public function testController ($id)
        {
            return Test::getTestInfo();
        }
    
    数据连接
    • 文件位置 config/database.php vendor/.env
    • 链接数据库
    // 路由
    Route::get('getUserInfo', ['uses' => 'userController@getUserInfo']);
    
    <?php
    namespace AppHttpControllers;
    use IlluminateSupportFacadesDB;
    
    class userController extends  Controller {
        public function getUserInfo ()
        {
            // 返回的bool值
            $res['res'] = DB::insert('insert into user(name,age) values(?,?)', ['name2',18]);
            // 返回影响行数
            $res['changeRes'] = DB::update('update user set age = ? where id = ?', [17,1]);
            $res['userData'] = DB::select('select * from user');
            // 返回删除的行数
            <!--$res['userData'] = DB::delete('delete from user where id = ?', [5]);-->
            <!--return $res;-->
            // 格式化
            dd($res);
        }
    }
    
    
    // 输出显示
    array:1 [▼
      "userData" => array:4 [▼
        0 => {#202 ▼
          +"id": 1
          +"name": "maomao"
          +"age": 17
        }
        1 => {#204 ▼
          +"id": 2
          +"name": "xinxin"
          +"age": 18
        }
        2 => {#205 ▼
          +"id": 3
          +"name": "name"
          +"age": 18
        }
        3 => {#206 ▼
          +"id": 4
          +"name": "name2"
          +"age": 18
        }
      ]
    ]
    
    查询构造器
     // 查询构造器  新增
        public function queryBuilder()
        {
            // 返回的bool值
            $res['bool'] = DB::table('user')->insert(
                ['name' => 'queryBuilder', 'age' => 19],
                ['name' => 'queryBuilder2', 'age' => 19]
            );
            // 获取
            $res['id'] = DB::table('user')->insertGetId(
                ['name' => 'queryBuilder', 'age' => 19]
            );
            var_dump($res);
        }
    
        // 查询构造器 更新
        public function queryBuilder2()
        {
            // 返回的影响行数
            $res['num'] = DB::table('user')
                ->where('id', 1)
                ->update(
                ['name' => 'queryBuilderMao', 'age' => 19]
            );
            // 更新自增
            $res['incrementNum'] = DB::table('user')
                ->where('id', 1)
                ->increment('age',1);
            // 更新自减
            $res['decrementNum'] = DB::table('user')
                ->where('id', 1)
                ->decrement('age',1);
            // 更新自增自减时修改其它条件信息
            $res['decrementNum'] = DB::table('user')
                ->where('id', 1)
                ->decrement('age',1,['name' => 'lala']);
            var_dump($res);
        }
    
        // 查询构造器 删除
        public function queryBuilder3()
        {
            // 返回的影响行数
            $res['deleteNum'] = DB::table('user')
                ->where('id', 6)
                ->delete();
            // 区间条件删除
            $res['deleteNum2'] = DB::table('user')
                ->where('id','>=', 5)
                ->get();
            // 清除表信息
            $res['truncateNum'] = DB::table('user')
                ->truncate();
            var_dump($res);
        }
    
        // 查询构造器 查询
        public function queryBuilder4()
        {
            // 第一条
            $res['frist'] = DB::table('user')
                ->orderBy('id', 'desc')
                ->frist();
            // 全部
            $res['user'] = DB::table('user')
                ->get();
            // 清除表信息
            $res['truncateNum'] = DB::table('user')
                ->truncate();
            var_dump($res);
        }
    
    ORM
    • 简介据说时一个优美的activeRecord实现,用来实现数据库的操作
    • 每个数据表对应一个model,用来和数据表的数据交互
    <?php
    namespace AppHttpControllers;
    
    use AppStudent;
    
    class StudentController extends  Controller
    {
        public  function orm()
        {
            // 查询 all()
            $student = Student::all();
            dd($student);
    
            // find() 一条
            $findData = Student::find(2);
            dd($findData);
    
            // findOrFail() 根据逐渐查找,没有则抛出异常
            $findData = Student::findOrFa (3);
            dd($findData);
    
            // 查询第一条
            $findData = Student::where('id','>', '1')
                        ->orderBy('id', 'desc')
                        ->first();
            dd($findData);
    
            // 分组
            echo '<pre>';
            Student::chunk(1,function ($students)
            {
             var_dump($students);
            });
    
            // 聚合函数(count, max, min, avg)
            $num = Student::count();
        }
    
        // 使用模型新增数据
        public function orm1()
        {
            // student模型对象
            $student = new Student();
            $student ->name = 'name133';
            $student ->age = 12;
            $bool = $student->save();
            dd($bool);
    
            $student = Student::find(5);
            echo date('Y-m-d H:i:s', $student->created_at);
    
            // 使用模型的Create方法新增数据
            $addRes = Student::create(
                ['name'=>'llll','age'=>12]
            );
    
            // 使用模型的firstOrCreate方法新增数据
            $addRes = Student::firstOrCreate(
                ['name'=>'lll','age'=>12]
            );
    
            // 使用模型的firstOrNew方法新增数据,通过属性查询用户没有则建立新的实例
            $student = Student::firstOrNew(
                ['name'=>'ll','age'=>12]
            );
            // 需要保存则自行调用save
            $addRes = $student->save();
            dd($addRes);
        }
    
        // 更新
        public function orm2()
        {
            // 返回更新行数
            $num = Student::where('id','>',2)
                    ->update(['name'=> 'sb']);
            var_dump($num);
        }
    
        // 删除
        public function orm3() {
            $students = Student::find(1);
            $bool = $students->delete();
    
            // 通过主键删除
            $num = Student::destroy(1);
    
            $num2 = Student::where('id', '<',12)
                            ->delete();
    
        }
    }
    
  • 相关阅读:
    测试方案
    测试需求
    软件测试知识点总结
    自动化测试
    测试——缺陷报告包括那些内容,由什么组成
    测试——缺陷的类型
    软件测试工具简介
    测试工程师
    剑指offer系列21--二叉搜索树的后续遍历序列
    剑指offer系列20--从上到下打印二叉树
  • 原文地址:https://www.cnblogs.com/maomojun/p/9141121.html
Copyright © 2011-2022 走看看