美文网首页
laravel笔记

laravel笔记

作者: 任人渐疏_Must | 来源:发表于2018-01-02 09:31 被阅读0次

    composer

    composer基本使用

    1. 在指定文件夹下创建composer.json,填写相关的配置(注意:文件中所有的引号都是双引号,json字符串的格式不能有误)
    {
      "require":{
            "endroid/qrcode":"1.7.3"
    }
    }
    
    1. 在命令行下执行composer install(执行命令的时候,一定要将命令行的目录 切换到创建composer.json文件下)
    2. 创建php脚本,并且要引入vendor文件夹下的autoload.php
    3. 查看文档,使用工具包

    更新composer.json文件

    1. 修改文件
    {
        "require:"{
            "endroid/qrcode":"1.7.3",
            "gregwar/captcha":"v1.1.1"
    
        }
    
    }
    
    

    2.更新
    composer update

    软件更新

    composer self-update

    laravel

    运行环境

    1. php版本>=5.5.9
    2. Mcrypt PHP扩展 (php的加密扩展,提供多种加密算法)
    3. openssl扩展 (对传输的数据进行加密)
    4. mbstring扩展(提供了针对多字节字符串字节编码)
    5. Tokenlzer PHP扩展(php代码解析)

    安装

    1.composer安装
    composer create-project laravel/laravel your-project-name --prefer-dist "5.*.*"

    1. 直接复制一份安装

    路由

    • 是将信息从源地址传递到目的地的角色*
    • 文件位置:app/Http/routs.php或者app/routes/web.php(版本不同位置有差别)
    • 基本路由:
    1. Route::get('/',function(){ return 'hello world!' });
    2. Route::post('/insert',function(){});
    3. Route::put(......);
    4. Route::delete('.....');
    • laravel框架中所有的模板文件都是存放在resources/views中,模板文件都是以.blade.php结尾

    • 在每一个post表单中需要添加隐藏域来完成请求{{csrf_field()}}

    • 加参数的路由

    //限制参数的类型
    Route::get('/goods/{id}',function($id){
      echo ‘商品详情页当前id为’.$id;
    })->where('id','\d+');
    
    //多个参数
    Route::get('/{type}-{id}',function($type,$id){
      echo '当年的类型为'.$type.',当前的id为'.$id;
    });
    
    //别名
    Route::get('/Admin/User/index',[
    'as'=>'ulist',
    'uses'=>function(){
      echo "这里是后台用户显示";
      echo route('ulist'); //route函数是通过路由来快速创建完整url的
    }  
    ]);
    
    //路由组
    Route::group([],function(){
    
    });
    
    
    • 404页面设置
    1. abort(404,'没有找到相关页面!');
    2. 设置模板——>resources/views/errors/404.blade.php

    中间件

    1. 创建(默认不直接生效)
      php artisan make:middleware LoginMiddleware
      生成的中间件都在 app/Http/Middleware

    2. 编写代码

    3. 注册
      ——全局注册
      在Kernel.php——>$middleware成员属性中添加
      ——路由注册
      在Kernel.php——>$routeMiddleware成员属性中添加

    4. 使用

    Route::get('/middle',['middleware'=>'test',function(){
     return 'hello world!';
    }]);
    
    Route::get('/aa',function(){
     return "aa";
    })->middleware('test');
    

    控制器

    app/Http/Controllers

    1. 创建控制器
      php artisan make:controller UserController
      php artisan make:controller UserController --plain(无多余方法的)
    2. 路由以及访问
    //当前用户请求服务器上的/controller路径时,会执行UserController控制器文件中的show方法
    Route::get('/controller','UserController@show');
    
    //使用别名
    Route::get('admin/user/delete/{id}',[
      'as'=>'udelete',
      'uses'=>'UserController@delete'
    ]);
    
    Route::get('admin/user/index',[
      'middleware'=>'login',
      'uses'=> 'UserController@index'
    ]);
    
    1. 隐式控制器
    //如果是goods开头的路径,都交给GoodsController处理
    Route::controller('goods','GoodsController')
    
    //在GoodsController中添加add方法,前面加请求方式(get/post)
    //GET  /goods/add  HTTP/1.1
    public function getAdd(){
    }
    
    //插入的请求方式为post
    //POST /goods/insert HTTP/1.1
    public function postInsert(){}
    
    
    

    4.restful控制器

    Route::resource('photos', 'PhotoController');

    方法 路径 动作 路由名称
    GET /photos index photos.index
    GET /photos/create create photos.create
    POST /photos store photos.store
    GET /photos/{photo} show photos.show
    GET /photos/{photo}/edit edit photos.edit
    PUT/PATCH /photos/{photo} update photos.update
    DELETE /photos/{photo} destroy photos.destroy

    请求

    1.基本信息获取

    $request->method(); #获取请求方法
    $request->IsMethod('post');#检验方法
    $request->path();#请求路径
    $request->url();#获取完整url
    $request->ip();#获取ip
    $request->getPort();#获取端口
    
    1. 提取请求参数
    $name = $request->input('name'); #基本获取 
    $request->input('name','Sally'); #设置默认值
    $request->has('name'); #检测是否存在
    $input = $request->all(); #提取所有参数
    
    $request->only(['username','password']); #提取部分
    $request->except(['credit_card']); #提取部分
    
    $request->header('Connection');#获取头信息
    
    
    1. 文件操作
      $request->hasFile('photo'); #检测是否有文件上传
      $request->file('photo')->move('./uploads/','001.jpg');#将文件移动到指定位置
    
    1. cookie操作
      \Cookie::queue('name','Jack',10); #设置
      return response(' ')->withCookie('uid',10,10); #设置
    
    \Cookie::get('name'); #读取
    $request->cookie('name'); #读取
    
    
    1. 闪存信息
    $request->flash();#将所有参数写入闪存
    $request->flashOnly('title','price');#将部分参数写入闪存
    $request->flashExcept('_token');#除去某些参数之外的参数
    \Session::flash('name','jack'); #自定义闪存
    
    

    响应

    return '哈哈哈'; #返回字符串
    return response('')->withCookie('id',20,60); #设置cookie
    return response()->json(['a'=>100,'b'=>2000]);#返回json
    return response()->download('web.config');#下载文件
    return redirect('/goods/add');#页面跳转
    return response()->view('goods.add');#显示模板
    return response('')->head('name','helloworld'); #响应头
    

    视图

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

    模板引擎blade

    resources/views  #模板的默认存放位置
    {{$username}} #使用变量
    {{time()}}#使用函数
    {{$username or 'guest'}} #设置默认值
    {{!! $name !!}} #显示html代码
    @include('header')#引入子视图
    

    模板继承

          #占位符
                @yield('title')
                @section('content')
                @show
    
            #新模板内容
                  @extends('index')
                  @section('title','new Title')
    
                  @section('content')
                            new contents is here
                  @endsection
    

    流程控制

    @if(count($records)===1)
          I have one record!
    @elseif(count($records) >1)
          I have multiple records!
    @else
          I don't have any records!
    @endif
    

    循环控制

      @for($i = 0;$i<10;$i++){}
      @endfor
    
      @foreach($users as $user)
      @endforeach
    

    数据库

    支持的数据库类型 Mysql ,Postgres, SQLite, SQL Server

    数据库连接配置

    * 文件位置:`config/database.php`
    * 结果集的返回类型 :`'fetch'=>PDO::FETCH_ASSOC`
    * .env环境快速配置
    

    数据库的基本操作

      ```
        DB::select  #查询
        DB::insert   #插入
        DB::update #更新
        DB::delete  #删除
        
         DB::statement('drop table users');#一般语句
         
          #事务操作
          DB::beginTransaction
          DB::rollBack()
          DB::commit()
    
    
          DB::connection('foo')->select(....);#操作多个数据库
      ```    
    ### 构造器
    
      #### 插入
    
    #单条
      DB::table('users')->insert(
          ['email'=>'xxx@qq.com','votest'=>0]
        );
      #多条
      DB::table('users')->insert([
           ['email'=>'xxx@qq.com','votest'=>0],
           ['email'=>'zzz@qq.com','votest'=>0]
     ] );  
      #获取id插入
      $id = DB::table('users')->insertGetId(
              ['email'=>'xxx@qq.com','votes'=>0]
        );
    
    
    

    更新

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

    删除

    DB::table('users')->where('votes','<',100)->delete();

    查询

    DB::table('users')->get() #查询所有
    DB::table('users')->first() #查询单条
    DB::table('users')->value('username')#查询单条结果中的某个字段
    DB::table('users')->lists('username') #获取一列数据
    
    

    连贯操作

      DB::table()->select()->get() #设置字段
      orderBy('name','desc') #排序
      DB::table(users')->skip(10)->take(5)->get(); #分页
    
    #连接表
      DB::table('users')
            ->join('contacts','users.id','=','contacts.user_id')
            ->join('orders','users.id','=','orders.user_id')
            ->select('users.*','contacts.phone','orders.price')
            ->get();
    

    条件

      DB::table('users')->where('votes','>',100)->orWhere('name','John')->get();
      DB::table('users')->whereBetween('votes',[1,100])->get();
      DB::table('users')->whereIn('id',[1,2,3])->get() ;
    

    计算

      DB::table('users')->count() #总数
      DB::table('orders')->max('price')#最大值
      DB::table('order')->avg('price')#平均值
    

    sql语句记录

    Event::listen('illuminate.query',function($query){var_dump($query);});
    放入路由文件中

    数据库迁移

    • 创建类文件
      php artisan make:migration test

    up 方法

    • 创建表
    Schema::create('users',function(Blueprint $table){
      $table->increments('id')->comment('主键字段');
      $table->string('username')->nullable()->default('abc')->comment('用户名');
      $table->char('password',100)->comment('密码');
    });
    
    • 创建表字段
      1.字段类型
      ```
      $table->increments('id'); #主键字段
      $table->string('username');#字符串字段
      $table->integer('age');#整型
      $table->float('weight'); #浮点型
      $table->text('intro'); # 文本类型
        ```        
          2. 字段修饰
           ` nullable  default   unsigned  comment  `
    
          3. 索引
              ```
                  $table->primary('id');#主键
                  $table->index('password');#一般索引
                  $table->unique('username');#唯一索引
              ```
           4. 设置引擎
          `$table->engine = 'myisam;'`          
    

    down方法

    Schema::drop('users');#删除表

    命令

    php artisan migrate
    php artisan migrate:refresh

    记录表结构的变化

    • 检测表是否存在
      Schema::hasTable('gg')

    • 检测表中的字段是否存在
      Schema::hasColumn('gg','pic')

    • 增加字段(如果表存在)
      ·Schema::table('users',function($table){ $table->string('email');})·;

    • 修改字段
      这里需要安装一个包composer require doctrine/dbal
      $table->decimal('price',10,2)->change();

    • 删除字段
      $table->dropColumn('phone');

    • 检测 索引

    • 删除

    $table->dropPrimary
    $table->dropUnique
    $table->dropIndex
    
    

    数据库数据填充

    套路一

    1. 创建注入文件(文件默认在database/seed中)php artisan make:seeder user
    2. 在文件中填写注入代码
    3. 运行指令 php artisan db:seed --class=user

    套路二

    1. 创建注入文件
    2. 在文件中书写注入代码
    3. 在DatabaseSeeder 文件中添加代码
    4. 运行指令 php artisan db:seed

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

    //app/library/helper.php
    #在项目下的composer.json中添加信息
    "autoload":{
      "classmap":[
        "database"
    ],
    "files":[
      "app/Library/helper.php"
    ]
    },
    
    composer dump-auto
    
    

    调试工具

    debugbar安装

    composer require barryvdh/laravel-debugbar
    
    #在config/app.php里面的providers添加
    
    Barryvdh\Debugbar\ServiceProvider::class
    
    

    chrome插件postman

    模型操作

    创建模型

    php artisan make:model Order
    php artisan make:model Order -m #会自动添加迁移文件
    
    

    模型限定

    • 模型所对应的默认的表名是在模型后面加s
      Order=>orders Goods=>goods
    • 主键字段 id
    • 时间字段 create_at update_at

    属性设置

    • 设置操作的表名
      public $table= 'userinfo';
    • 设置默认的时间字段
      public $timestamps = false;
    • 修改默认的主键名称
      public $primaryKey = 'uid';

    laravel 使用前端框架Bootstrap

    yarn install --no-bin-links
    yarn add cross-env
    
    • 安装完成之后,让我们对 Laravel 默认生成的 app.scss 文件进行编辑,删除此文件里的所有内容,只留下面一行,导入 Bootstrap:
      resources/assets/sass/app.scss

      @import "node_modules/bootstrap-sass/assets/stylesheets/bootstrap";

    • 将 Bootstrap 导入成功之后,我们需要使用以下命令来将 .scss 文件编译为 .css 才能正常使用,编译命令如下:

      npm run dev

    • 我们也可以通过下面的命令,在每次检测到 .scss 文件发生更改时,自动将其编译为 .css 文件:

      $ npm run watch-poll

      请保证在进行项目开发时 npm run watch-poll 一直运行着,避免出现前端文件更改后没有应用到页面上的歧义

    相关文章

      网友评论

          本文标题:laravel笔记

          本文链接:https://www.haomeiwen.com/subject/zhbrwxtx.html