Laravel基础用法

  • Laravel使得防止应用遭到跨站请求伪造攻击变得简单。跨站请求伪造是一种通过伪装授权用户的请求来利用授信网站的恶意漏洞。

  • Laravel自动为每一个被应用管理的有效用户Session生成一个CSRF“令牌”,该令牌用于验证授权用户和发起请求者是否是同一个人。想要生成包含CSRF令牌的隐藏输入字段,可以使用帮助函数csrf_field来实现:

<?php echo csrf_field(); ?>
帮助函数csrf_field生成如下HTML:

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
  • 当然还可以使用Blade模板引擎提供的方式:
    • 使用post提交
      • {!! csrf_field() !!}
      • {{csrf_field()}}
  • 你不需要了解在POST、PUT或者DELETE请求时CSRF令牌是如何进行验证的,HTTP中间件VerifyCsrfToken会为我们做这项工作:将请求中输入的token值和session中的存储的作对比。
  • 路由 :
    • 文件位置 app/Http/routes.php
    • 基本路由
      • Route::get('/love', function(){return '弄啥来'})
      • Route::post('/insert', function(){})
      • Route::put(....)
      • Route::delete('....');
    • 带参数的路由 :
      • 普通使用

        Route::get('/goods/{id}', function($id){
        	echo $id;
        });
        
      • 限制参数类型 :

        Route::get('/param/{name}', function($name){
            return $name;
        })->where('name','[a-z]+');
        
    • 传递多个参数 :
      Route::get('/getParams/{name}/{id}', function($name, $id){
          //请求对象
          // echo $request->route('name');
          // echo $request->route('id');
      });
      
    • 路由别名 :
      Route::get('/Home/Goods/show/{id}', ['as'=>'goods', function($id){
          //普通创建url
          // echo url('/param/hahah').'<br>';
          //路由别名创建url
          // echo route('goods',['id'=>11]).'<br>';
          //实现页面跳转
          // return redirect()->route('goods',['id'=>12]);
          //获取路由名称
          return Route::currentRouteName();
      }]);
      
    • 路由组设置 :
      Route::group([], function(){
          Route::get('/404', function(){
              abort(404,'not found!!!');
          });
      });
      
  • 中间件 :
    • 作用 : 关卡,过滤
    • 创建(默认不直接生效)
      • php artisan make:middleware LoginMiddleware
    • 事例代码 :
      <?php
          namespace App\Http\Middleware;
      
          use Closure;
          
          class LoginMiddleware
          {
              public function handle($request, Closure $next)
              {
                  //request变量 记录所有的请求参数
                  if(!$request->cookie('uid')) {
                      return redirect('/');
                  } 
                  return $next($request);
              }
          }
      ?>
      
    • 注册 :
      • 全局注册
        Kernel.php >>>>  $middleware成员属性
        protected $middleware = [
            \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
            \app\Http\Middleware\TestMiddleware::class
        ];
        
      • 路由注册
        Kernel.php >>>> $routeMiddleware成员属性
        protected $routeMiddleware = [
            'auth' => \app\Http\Middleware\Authenticate::class,
            'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
            'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class,
            'guest' => \app\Http\Middleware\RedirectIfAuthenticated::class,
            'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
            'test' => \app\Http\Middleware\TestMiddleware::class,
        ];
        
    • 使用 :
      Route::get('/middle', [
          'middleware'=>'test', 
          'uses'=>function(){
              return 'iloveyou';
          }
      ]);
      
      Route::get('/mm', function(){
          return 'mm';
      })->middleware('test');
      
  • 控制器 :
    • 创建控制器
      • php artisan make:controller IndexController --plain
      • php artisan make:controller IndexController
    • 路由访问
      • 普通访问
        • Route::get('/User/add', 'UserController@add');
      • 带参数访问
        • Route::get('/User/edit/{id}', 'UserController@edit');
      • 别名
        设置: Route::get('/User/index', ['uses' => 'UserController@index','as' => 'user']);
        
        使用: route('user')
        
      • 中间件控制
        Route::get('/user/edit/{id}', [
        'middleware' => 'login',
        'uses' => 'TestController@edit']
        );
        
        Route::get('/user/edit/{id}', 'TestController@edit')->middleware('login');
        
      • 隐式控制器
        • 路由
          • Route::controller('users', 'UserController');
        • 使用
          <?php
              namespace App\Http\Controllers;
              
              class UserController extends Controller
              {
                  /**
                   * 响应/users的GET请求
                   */
                  public function getIndex()
                  {
                      //
                  }
              
                  /**
                   * 响应/users/show/1的GET请求
                   */
                  public function getShow($id)
                  {
                      //
                  }
              }
          ?>
          
  • 请求 :
    • 基本信息获取
      • 请求路径 $request->path()
      • 检测路径 $request->is('admin/*')
      • 获取完整url $request->url();
      • 获取请求方法 $request->method();
      • 检测方法 $request->isMethod('post')
      • 获取指定类型的参数 \Input::get('id');
    • 提取请求参数
      • 基本获取 $name = $request->input('name');
      • 设置默认值 $request->input('name', 'Sally');
      • 检测是否存在 $request->has('name')
      • 提取所有的参数 $input = $request->all();
      • 提取部分 :
        • $request->only(['username', 'password']);
        • $request->except(['credit_card']);
    • 闪存信息
      • 将所有的请求参数写入闪存中 $request->flash()
      • 将部分参数写入闪存中
        $request->flashOnly('title','price') 配合: old() {{old('price')}}
        
      • 除去某些参数之外的参数 $request->flashExcept('_token');
      • 简便使用 return back()->withInput();
    • 文件操作
      • 检测是否有文件上传 $request->hasFile('photo')
      • 将文件移动到指定位置
        $request->file('photo')->move('./uploads/', 'iloveyou.jpg');
        ------------------------------------------------
        //图片上传
        public function file_upload(Request $request){
        
        	if($request->hasFile('photo')){
        
        		foreach($request->file('photo') as $photo){
        			$filename = str_random(5).time();
        
        			//文件后缀名
        			$suffle= $photo->getClientOriginalExtension();
        
        			$photo->move('./uploads',$filename.'.'.$suffle);
        		}
        		
        	}else{
        		return 'File error';
        	}
        
        }
        
    • cookie操作
      • 设置
        • \Cookie::queue('name','iloveyou',10);
        • return response('haha')->withCookie('uid',10,10);
      • 读取
        • $request->cookie('name');
        • \Cookie::get('name');
  • 响应 :
    • 返回字符串 return '哈哈哈';
    • 设置cookie return response('')->withCookie('id',20,60);
    • 显示模板 return response()->view('goods.add');
    • 返回json return response()->json(['a'=>100,'b'=>2000]);
    • 下载文件 return response()->download('web.config');
    • 页面跳转 return redirect('/goods/add');
  • 视图 :
    • 解析模板 view('user.add');
    • 分配数据到模板 view('user.edit',['username'=>'admin'])
    • 模板引擎blade :
      • 模板的默认存放位置 resources/views
      • 占位符 :
        @yield('title')
        
        @section('content')
            ....
        @show
        
      • 继承新模板内容
        @extends('index')
        
        @section('title', 'new Title')
        
        @section('content')
            new contents  is here
        @endsection
        
      • 使用变量 {{$username}}
      • 使用函数 {{time()}}
      • 设置默认值 {{$username or 'guest'}}
      • 显示html代码 {!! $name !!}
      • 引入子视图 @include('header')
      • 流程控制:
        @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++)
            The current value is {{ $i }}
        @endfor
        
        @foreach ($users as $user)
            <p>This is user {{ $user->id }}</p>
        @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' => 'john@example.com', 'votes' => 0]
          );
          
          • 多条
          DB::table('users')->insert([
              ['email' => 'taylor@example.com', 'votes' => 0],
              ['email' => 'dayle@example.com', 'votes' => 0]
          ]);
          
          • 获取id插入
          $id = DB::table('users')->insertGetId(
              ['email' => 'john@example.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('user')->value('username')
            
          • 获取一列数据DB::table('user')->lists('username')
      • 连贯操作
        • 设置字段
        DB::table('users')->select('name', 'email as user_email')->get()
        
        • 条件
        DB::table('users')
            ->where('name', 'like', 'T%')
            ->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()
        
        • 排序orderBy('name', 'desc')
        • 分页DB::table('users')->skip(10)->take(5)->get();
        • 连接表(join) :
        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')->count()
          • 最大值DB::table('orders')->max('price')
          • 平均值DB::table('orders')->avg('price')
    • sql语句记录
      App/Providers/AppServiceProvider.php
      boot方法中添加
      DB::listen(function($sql, $bindings, $time){
           //写入sql
           file_put_contents('.sqls', "[".date('Y-m-d H:i:s')."]".$sql."\r\n", FILE_APPEND);
      });
      
  • 设置自定义函数和自定义类文件 :
app/library/helper.php

在项目下的composer.json中添加信息
"autoload": {
    "classmap": [
        "database"
    ],
    "psr-4": {
        "App\\": "app/"
    },
    "files":[
        "app/Library/helper.php"
    ]
},
  • 调试工具 :
    • debugbar安装
    composer require barryvdh/laravel-debugbar
    
    在config/app.php里面的providers添加
    Barryvdh\Debugbar\ServiceProvider::class,
    
    • chrome插件postman
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值