zoukankan      html  css  js  c++  java
  • Laravel 学习笔记

    1. 简介

    2. 运行环境要求

    2.1 PHP版本 >= 5.5.9

    2.2 Mcrypt PHP 扩展 --------------------------php的加密扩展,提供多种加密算法

    2.3 openssl扩展 ---------------------------------对传输的数据进行加密

    2.4 mbstring扩展 --------------------------------mbstring扩展库用于处理多字节字符串,全称是Multi-Byte String 即各种语言都有自己的编码,他们的字节数是不一样的,目前php内部的编码只支持ISO-8859-*, EUC-JP, UTF-8,其他的编码的语言是没办法在php程序上正确显示的,解决的方法就是通过php的mbstring函数库来解决。

    2.5 Tokenizer PHP扩展 ------------------------php代码解析

    3. 安装

    首先得进到想要安装的目录下再执行:
    composer create-project laravel/laravel blog01 --prefer-dist “5.1.*”(blog01为项目名)

    4. 配置

    5. 路由:

    5.1 文件位置:app/Http/routes.php

    5.2 基本路由:

    Route::get('/seeting', function(){ return '测试' ; });

    Route::post('/insert', function(){ return '测试' ; });

    Route::put(........);

    Route::delete(...);

    5.3 带参数的路由

    5.4 传递多个参数

    5.5 路由别名

    5.6 路由组设置

    5.7 404页面设置

    6. 中间件

    6.1,在项目根目录下使用:php artisan make:middleware AdminMiddleware 中间件名称Middleware命令创建中间件
     
        创建中间件 php artisan make:middleware AdminMiddleware 中间件名字(AdminMiddleare)
     
    6.2,在中间件中写下规则,主要就是进行判断是否登录,当然也别忘了引入命名空间,如下例:
        public function handle($request, Closure $next)
        {
        //判断是否登陆,如未登录则重定向到登陆页
        if(empty(Session::get('admin'))) {
        return redirect('/login');
        }
        //如已登陆则执行下一步
        return $next($request);
        }
     
     6.3,在 Kemel.php 文件中中间件添加到局部中间件中,如下例:
     
         protected $routeMiddleware = [
             'auth' => AppHttpMiddlewareAuthenticate::class,
             'auth.basic' => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class,
             'guest' => AppHttpMiddlewareRedirectIfAuthenticated::class,
             //添加的中间件 Admin
             'Admin' => AppHttpMiddlewareAdminMiddleware::class,
         ];
     
     6.4, 在路由里加入中间件,除了登录、注册和执行登录方法写到中间件外面,其余的方法都应该写入到中间件里面,如下例:
     
         Route::group(['domain' => 'www.wang.com'], function () {
             //登陆 写在中间件外面
             Route::resource('index','UserUserController');
             //注册 写在中间件外面
             Route::resource('create','UserUserController@create');
             //执行登陆 写在中间件外面
             Route::resource('login','UserUserController@login');
             //验证是否登陆中间件
             Route::group(['middleware' => 'Admin'],function(){
                 //列表
                 Route::resource('show','UserUserController@show');
                 //修改
                 Route::resource('edit','UserUserController@edit');
                 //执行修改
                 Route::resource('update','UserUserController');
                 //删除
                 Route::resource('destroy','UserUserController@destroy');
             });        
         });

     7. 控制器

    7.1 创建控制器 

    php artisan make:controller UserController

    或者(不创建方法 )

    php artisan make:controller UserController --plain

    7.2 路由以及访问

    7.2.1 普通访问

    //当用户请求服务器上的/controller路径时,会执行UserController控制器中的show方法
    Route::get('/controller','UserController@show');

    7.2.2 带参数访问

    //1.route.php
    //用户的修改
    Route::get('user/edit/{id}','UserController@edit');
    //2.UserController.php
    public function edit($id)
    {
        echo '这里是用户的修改操作。。。要修改用户的id为'.$id
    }

    7.2.3 别名

    //1.route.php
    //用户的删除操作
    Route::get('/admin/user/delete/{id}',['as'=>'udelete','uses'=>'UserController@delete']);
    //2.UserController.php
    public function delete()
    {
        echo route('udelete',['id'=>100]);
    }

    7.2.4 中间件控制

    //1.route.php 用户的升级操作
    Route::get('/user/shengji',[
        'middleware'=>'login',
        'uses'=>'UserController@shenji'
    ]);
    //UserController.php
    //用户的升级操作
    public function shengji()
    {
    echo '这是用户的升级操作。。。';
    }

    或者

    Route::get('user/jinyong','UserController@jinyong')->middleware('login');
    //UserController.php
    //用户的禁用操作
    public function jinyong()
    {
    echo '这是用户的禁用操作。。。';
    }

    7.2.5 隐式控制器

    //隐式控制器  如果是goods开头的路径  都是交给GoodsController来实现
    Route::controller('goods','GoodsController');
    //GoodsController.php
    //方法前面带请求方式,并且是驼峰命名
    public function getAdd()
    {
        return view('add');
    }
    public function getShow()
    {
        echo '商品的显示操作。。。'
    }
    //商品的插入操作
    public function postInsert()
    {
    echo '商品的插入操作';
    }
    //add.blade.php
    <!--add.blade.php-->
    <!--csrf_field()隐藏域-->
     <body> 
    <form action="/goods/insert" method="post"> <input type="text" name="username">
    <input type="text" name="username">
    {{csrf_field()}}
    <button>点击添加</button> </form> </body>

    总结:

    隐式控制器的使用方法:

    a)创建路由规则

    Route::Controller('goods','GoodsController')

    b)GRT/goods/add HTTP/1.1

         这个时候会执行 GoodsController下的getAdd方法

        POST/goods/insert HTTP/1.1

        这个时候会执行 GoodsController下的postInsert方法

    7.2.6 restful控制器路由(匹配7个路由规则)

    //route.php
    //restful控制器路由
    Route::resource('article','ArticleController');
    
    //ArticleController.php
    //GET /article HTTP/1.1
    public function index()
    {
        echo '这里是文章显示的首页。。';
    }

     

    8.  控制器

    8.1 基本信息获取

    获取请求方法
    $request->method();
    检测方法
    $request->isMethod('post');
    请求路径
    $request->path();
    获取完整url
    $request->url();
    获取ip
    $request->ip();
    获取端口
    $request->getPort();

    8.2 提取请求参数

    8.2.1 基本获取

    //8.2.1基本获取
    $username = $request->input('username');
    $password = $request->input('password');

    8.2.2 设置默认值

    //若传参了则用传递的参数,否则用默认值
    $res = $request-.input('vip',10);
    var_dump($res);

    8.2.3 检测请求参数是否存在

    $res = $request->has('username');
    var_dump($res);

    8.2.4 获取所有的请求参数

    $res = $request->all();
    var_dump($res);

    8.2.5 提取部分

    //提取需要的
    $res
    = $request->only(['username','password']);

    //剔除不需要的参数

    $res = $request->except(['username','password']);
    var_dump($res);

    8.2.6 获取请求头信息

    //$res = $request->header('Connection');
    //$res = $request->header('cache-Control');
    //$res = $request->header('Cookie');
    var_dump($res);

    8.3 文件操作

    8.3.1 检测文件是否上传

    $request->hasFile('photo');

    8.3.2 将文件移动到指定位置

    $request->file('photo')->move('./uploads/','bg.jpg');
    //案例
    //route.php
    Route::get('/file','UserController@show')
    Route::post('/upload','Controller@upload')
    
    //UserController.php
    public function show()
    {
        return view('upload');
    }
    //文件上传
    public function upload(Request $request)
    {
        //检测文件是否上传
        //$res = $request->hasFile('profile');
    //php脚本中相对路径,都是相对于当前正在请求的文件。(public/index.php)
    if($request->hasFile('profile')){ $request->file('profile')->move('./upload','liuyan.jpg'); } } //upload.blade.php <form action="/upload" method="post" enctype="multipart/form-data"> 头像<input type="file" name="profile"/> {{csrf_filed()}} <button>点击上传</button> </form>

    8.4 cookie操作

    8.4.1 设置

    1. Cookie::queue('name','iloveyou',10);
    2. return response('haha')->withCookie('uid',10,10);

    8.4.2 读取

    1. Cookie::get('name');
    2.  $request->cookie('name');
    //cookie操作
    Route::get('/cookie','UserController@cookie');
    
    //UserController.php
    public function cookie(Request $request)
    {
        //写入cookie,时间单位为分钟
       //第一种
        // Cookie::queue(‘name’,'xdl',20);
        //第二种
        //return response('')->withCookie('xqq','zhenhao',5);
    
        //读取
        //第一种
       $res = Cookie::get('name');
        //第二种
        $res = $resquest->cookie('xqq');
        var_dump($res);
    }

    8.5 闪存信息

    8.5.1 将所有的请求写入闪存中

    $request->flash();

    8.5.2 将部分参数写入闪存中

    $request->flashOnly('title','price');

    8.5.3 除去某些参数之外的参数

    $request->flashExcept('_token');

    8.5.4 自定义闪存

    Session::flash('name','xiaohigh');
    //闪存的演示
    
    //route.php
    Route::get('/flash','UserController@flash');
    Route::post('flash','UserController@doflash');
    Route::get('/old','UserController@old');
    //UserController.php publlic function flash() { return view('flash'); }
    public function doflash(Request $request)
    {
    //var_dump($request->all());
    $request->flash();//将请求过来的参数都闪存起来
    //若发现参数不对,则跳转到原来的页面重新填写参数
    return back();
    }
    public function old()
    {
    var_dump(old('username'));
    }
    //flash.blade.php <form action="/flash" method="post"> 用户名:<input type="text" name="username" value="{{old('username')}}"><br> 密码:<input type="text" name="password" value="{{old('password')}}"><br> 年龄<input type="text" name="age" value="{{old('age')}}"> {{csrf_filed()}} </form>

     9.响应

    9.1 返回字符串

    return ‘哈哈哈哈’;

    9.2 设置cookie

    //cookie的名字,值,生命周期
    return
    response('name')->withCookie('id',20,60);

    9.3 返回json

    return response()->json(['a'=>100,'b'=>2000]);

    9.4 下载文件

    return response()->download('web.config');

    9.5 页面跳转

    return redirect('/goods/add');

    9.6 显示模板

    return response()->view('goods.add');
    //设置返回内容并跳转
    return '支付成功!3s后页面跳转。。<script>
        setTimeout(function(){
        location.href="/form"
    },3000)
    </script>'

    10. 视图

    10.1 解析模板  view('user.add');

    10.2 分配数据到模板  view('user.edit',['username'=>'admin']);

    10.3 模板引擎blade

    10.3.1 模板的默认存放位置  resources/views

    10.3.2 使用变量  {{$username}}

    10.3.3 使用函数  {{time()}}

    10.3.4 使用默认值 {{ $username or 'guest' }}

    10.3.5 显示html代码  {!! $name !!}

    10.3.6 引入子视图  @include('header')

    10.3.7 模板继承

    10.3.7.1 占位符 

    1.@yield('title')

    2.@section('content')

    3.@show

    10.3.7.2  新模板内容

    1.@extends('index')

    2.@section('title','new Title')

    3. @section('content')

            new contents is here

        @endsection

    10.3.8 流程控制

    //流程控制
    //route.php
    Route::get('/liucheng','UserController@liucheng');
    
    //UserController.php
    public function liucheng()
    {
        return view('control.liucheng',['total'=>100]);
    }
    
    //liucheng.blade.php
    给你买
    @if($total >= 90 && $total <= 100)
        游戏机
    @elseif($total <= 90 && $total >= 60)
        信纸
    @endif

    10.3.9 循环控制 

    //for循环
    @for($i=0;$i<10;$i++)
        the current value is {{ $i }}
    @endfor
    
    //foreach循环
    @foreach($users as $user)
        <p>This is user {{ $user->id }}</p>
    @endforeach

     注:sublime搜索文件 ctrl+p,可以直接搜索报错的编译文件

    11. 数据库操作

    11.1 支持的数据库类型

    11.1.1 MysQL

    11.1.2 Postgres

    11.1.3 SQLite

    11.1.4 SQL Server

    11.2 数据库连接配置

    11.2.1 文件位置 config/database.php

    11.2.2 结果集的返回类型  ‘fetch’=>PDO::FETCH_ASSOC

    11.2.3 .env环境快速配置

    11.3 数据库基本操作

    11.3.1 查询 DB::select

    11.3.2 插入 DB::insert

    11.3.3 更新 DB::update

    11.3.4 删除 DB::delete

    11.3.5 一般语句 DB::statement('drop table users');

    11.3.6 事务操作

    1. DB::beginTransaction
    
    2. DB::rollBack()
    
    3. DB::commit()
    //开启事务
    DB::beginTransaction();
    //扣钱
    $res1= DB::update("update user set account = account -2000 where id = 1");
    //加钱
    $res2 = DB::update("update user set account = account + 2000 where id = 2");
    if($res1 && $res2){
        //事务提交
        DB::commit();
    echo '转账成功!'; }
    else{ //事务回滚 DB::rollback();
    echo '转账失败!'; }

    11.3.7 操作多个数据库 DB::connection('foo')->select(...)

    11.4 构造器

    11.4.1 增删改查

    //数据库操作
    Route::get('/db','UserController@db');
    
    //UserController.php
    use DB;
    public function db()
    {
        //查询
        //$res = DB::select("select * from goods where id < 50");
        //$res = DB::select('select * from goods where id = ?', [20]);
        //插入
        //$res = DB::insert('insert into goods (title, cid, price, pic, color, size, cname) Values("最新的秋裤",3,20,”3.jpg“,"红色","XXL","裤子")');
        $res = DB::insert("insert into good_test (title,price)values(?,?)",["最新的文化衫",20]);
        echo '<pre>';
        var_dump($res)
    }
    //查询构造器
    Route::get('/builder','UserController@builder');
    
    //UserController.php
    public function builder()
    {
        //插入动作
        $res = DB::table('user')->insert([
            'username'=>'lampbrother',
            'password'=>'lampbrother',
            'account'=>20000
        ]);
        dd($res);
    }
    11.4.1.1 插入
    1 单条
    DB::table('users')->insert(['email'=>'john@displore.com','coins'=>0]);
    2 多条
    DB::table('users')->insert(['email'=>'elsa@displore.com','coins'=>0],
    ['email'=>'anna@displore.com','coins'=>0]
    );
    3 获取id插入
    $id = DB::table('users')->insertGetId(['email'=>'tom@displore.com','coins'=>0]);

    11.4.1.2 更新
    DB::table('users')->where('id',1)->update(['votes'=>1]);

    11.4.1.3删除
    DB::table('users')->where('id','=',12)->delete();

    11.4.1.4 查询
    1.查询单条数据
    $res = DB::table('user')->first();
    
    2.查询多条
    $res = DB::table('user')->get();
    
    3.获取单个结果中的某个字段值
    $res = DB::table('user')->value('username');
    
    4.获取结果集中某个字段的所有值
    $res = DB::table('user')->lists('username');
    dd($res);

    11.4.2 连贯操作

    1.设置字段查询
    $res = DB::table('users')->select('username','password')->get();
    2.设置条件
    $res = DB::table('user')->where('username','=','xqq')->get();
    
    $res = DB::table('user')->where('coins','>',100)->orWhere('name','=','elsa')->get();
    
    $res = DB::table('users')->whereBetween('coins',[1,100])->get();
    
    $res = DB::table('users')->whereIn('id',[1,2,3])->get();
    dd($res);
    
    2.排序
    $res = DB::table('user')->orderBy('id','desc')->get();
    
    3.分页
    $res = DB::table('user')->skip(5)->take(4)->get();
    
    4.连接表
    $res = DB::table('good_test')
              ->leftJoin('cate','cate.id','=','good_test.cid')
              ->where('good_test.gid','<',20) 
              ->get();
    
    5.计算
    //总数
    $res = DB::table('users')->count();
    //最大值
    $res = DB::table('good_test')->max('price');
    //平均值
    $res = DB::table('good_test')->avg('price');

    11.5 sql语句记录

    //在路由中加入一下路由,则会把sql语句显示在浏览器中
    Event::listen('illuminate.query',function($query){
    var_dump($query);
    });

     11.6 数据库迁移

    简单介绍:Laravel框架管理数据库结构的一种方式

    功能:实现表结构的共享

    使用:

    //创建类文件
    php artisan make:migration test
    
    //up方法
    1.创建表
    Schema::create('test',function(Blueprint $table){});
    2.创建表字段
    主键字段  $table->increments('id');
    字符串字段  $table->string('username');
    整形   $table->integer('age');
    浮点型  $table->float('weight');
    文本类型  $table->text('intro');
    
    3.设置引擎
    php artisan migrate

     11.7 数据填充

    11.7.1 介绍:是laravel中一个快速向 数据库插入测试数据的方法

    11.7.2 使用

    11.7.2.1 套路一

    1.创建注入文件(文件默认在database/seed)
    php artisan make:seeder user
    
    2. 在文件中填写注入代码
    例如:
    public function run()
    {
        $arr = [];
        //循环
        for($i=0;$i<20;$i++){
            $tmp = [];
            $tmp['username'] = str_random(20);
            $tmp['password'] = str_random(20);
            $tmp['group_id'] = rand(1,10);
            $tmp['email'] = rand(100000,999999).'@qq.com';
            $tmp['sex'] = rand(0,1);
            $tmp['age'] = rand(10,60);
            //压入到数组中
            $arr[] = $tmp;
        }
        //插入
        DB::table('test')->insert($arr);
    }
    
    3. 运行指令
    php artisan db:seed --class=user

    11.7.2.2 套路二

    1. 创建注入文件
    php artisan make:seeder PostSeeder
    
    2. 在文件中书写注入代码
    public function run()
    {
        $data = [];
        for($i=0;$i<30;$i++){
            $tmp = [];
            $tmp['title'] = str_random(20);
            $tmp['content'] = str_random(100);
            $tmp['created_at'] = data('Y-m-d H:i:s');
            $tmp['updated_at'] = data('Y-m-d H:i:s');
            $data[] = $tmp;
        }
        DB::table('posts')->insert($data);
    }
    
    3. 在DatabaseSeeder文件中添加代码
    $this->call(PostSeeder::class);
    
    4. 运行指令 php artisan db:seed

    12. 设置自定义函数和自定义类文件

    1. 自定义文件 app/library/helper.php
    
    2. 在项目的composer.json中添加信息
    “autoload”:{
        "classmap":[
            "database"
        ],
        "psr-4":{
            "APP\":"app/"
        },
        "files":[
            "app/Library/helper.php"
        ]
    },
    
    3. 执行命令
    composer dump-auto

    13. 调试工具

    13.1 debugbar安装

    1. composer require barryvdh/laravel-debugbar
    
    2. 在config/app.php 里面的providers添加BarryvdhDebugbarServiceProvider::class,

    13.2 chrome插件postman

    FQ到谷歌应用商店安装postman插件

  • 相关阅读:
    BZOJ5057 : 区间k小值5
    Urozero Autumn 2016. UKIEPC 2016
    BZOJ2808 : 那些年我们画格子
    BZOJ4970 : [ioi2004]empodia 障碍段
    XVII Open Cup named after E.V. Pankratiev. XXI Ural Championship
    BZOJ4316 : 小C的独立集
    网络流(3)——找到最小st-剪切
    网络流(2)——用Ford-Fullkerson算法寻找最大流
    网络流(1)——网络、流网络和网络流
    退而求其次(4)——椭圆中的最大矩形
  • 原文地址:https://www.cnblogs.com/qjykn/p/10250027.html
Copyright © 2011-2022 走看看