Laravel入门教程(七)- 表单Controller

1. Controller

  • Request
  • Session
  • Response
  • Middleware

2. Request

  • Laravel中的请求使用的是symfony/http-doundation组件

  • Request中存放了:

    • $_GET
    • $_POST
    • $_COOKIE
    • $_FILES
    • $_SERVER

代码如下:

注意:需要引入 use Illuminate\HTTP\Request;

 namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; use Illuminate\HTTP\Request; // 在使用Request的时候要用 use App\Student; class StudentController extends Controller { public function request1(Request $request) { // 1. 取值 //获取一个request中的值 echo $request->input('name'); // 获取sex的值,如果sex不存在,则显示默认值“未知” echo $request->input('sex', '未知'); // 判断是否有参数 if($request->input('name')){ echo '

' . $request->input('name') . '

'
; } else{ echo '

不存在

'
; } //获取所有的参数 $res = $request->all(); dd($res); // 2. 判断请求类型 // 判断请求类型 echo $request->method(); // 判断是否是POST请求 if($request->isMethod('POST')){ echo 'YES'; } else{ echo 'NO'; } // 是否ajax请求 $res = $request->ajax(); var_dump($res); // 请求路径是否符合特定格式,是否是从student下的某个方法 $res = $request->is('student/*'); var_dump($res); // 显示请求的路径 echo $request->url(); } }

TODO:从Form中获取数据

3. Session

3.1. Session简介

  • session提供一种保存用户数据的方法
  • laravel支出多种session后端驱动:
    • Memcached
    • Redis
    • Database
    • file(默认)
  • Session配置文件位于config/session.php中

延伸阅读:Redis

3.2. 三种使用Session的方法:

  • HTTP request类的session()
  • session()辅助函数
  • Session facade类(需要添加use Illuminate\Support\Facades\Session;来引入)

3.3. 设置Session

  1. 打开 config/session.php
  2. 主要要设置的内容:


// 采用的session实现方式
'driver' => env('SESSION_DRIVER', 'file'),

// 超时时间,单位是分钟
'lifetime' => 120,

// 关闭浏览器时就Session失效
'expire_on_close' => false,

3.4. 存取Session



namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;
use Illuminate\HTTP\Request; // 在使用Request的时候要用
use Illuminate\Support\Facades\Session; // 在使用Facades的Session类来使用Session的时候要用


use App\Student;

class StudentController extends Controller {
    public function session1(Request $request) {
        // 1. HTTP request session();
        $request->session()->put('k1', ['name' => 'Martin']);
        $res = $request->session()->get('k1');
        var_dump($res);

        // 2. session()
        session()->put('k2', 'v2');
        $res = session()->get('k2');
        var_dump($res);

        // 3. Sesssion类
        Session::put('k3', 'v3');
        echo Session::get('k3');

        // 如果Session的key不存在,显示默认值
        echo Session::get('k4', 'default');

        Session::put(['k4' => 'v4']);
        echo Session::get('k4', 'default');

        // 把数据放到Session的数组中
        Session::push('student', 'Martin');
        Session::push('student', 'Miffy');
        Session::push('student', 'Rebecca');
        $res = Session::get('student');
        var_dump($res);

        // pull起的作用和get类似,但是只显示1次,显示后会删除
        $res = Session::pull('student', 'default');
        var_dump($res);

        // 取出所有的值
        $res = Session::all();
        var_dump($res);

        // 判断Session中是否有这个Key
        if (Session::has('student')) {
            $res = Session::all();
            echo 'Here
'
; var_dump($res); } else { echo 'No key = k1'; } // 删除一个key $res = Session::all(); var_dump($res); Session::forget('student'); $res = Session::all(); var_dump($res); // 清空所有 Session::flush(); $res = Session::all(); var_dump($res); // flash,不知道为什么这个有的时候会失败 // 环境是用file保存session $request->session()->flash('key1', 'value2'); echo $request->session()->get('key1', 'default'); } }

* Session::flash 有坑!*

3. Response



namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;
use Illuminate\HTTP\Request; // 在使用Request的时候要用
use Illuminate\Support\Facades\Session; // 在使用Facades的Session类来使用Session的时候要用
use Illuminate\Contracts\Routing\ResponseFactory; // 在用Response时需要

use App\Student;

class StudentController extends Controller {
    public function response1() {
        $data = [
            'errCode' => 0,
            'errMsg' => 'success',
            'data' => [
                'name' => 'Martin',
                'age' => 22
            ]
        ];

        // 3. 响应json
        return response()->json($data);

        // 4. 重定向
        return redirect('redirect1')->with('message', '我是flashdata');
        return redirect()->action('StudentController@redirect1');
        return redirect()->route('redirect1');
        return redirect()->back(); // 返回上一个页面
    }
}

4. Middleware

4.1. 中间件的作用

Laravel中间件提供一个方便的机制来过滤进入应用程序的 HTTP 请求。

4.2. 场景应用

  • 新建中间件
  • 注册中间件
  • 使用中间件
  • 中间件的前置和后置操作

    1. 新建中间件

    中间件位于 Http/Middleware 目录下

    
    
    namespace App\Http\Middleware;
    
    use Closure;
    
    class Activity {
        public function handle($request, $next) {
            if(time() < strtotime('2017-03-21')){
                return redirect('activity0');
            }
            return $next($request);
        }
    }
    1. 注册中间件

    app/Http/Kernel.php中,添加:

    class Kernel extends HttpKernel
    {
        // 省略了部分代码...
    
        protected $routeMiddleware = [
            'auth' => \App\Http\Middleware\Authenticate::class,
            'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
            'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
            'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
            'activity' => \App\Http\Middleware\Activity::class,
        ];
    }
    
    1. 使用中间件

    2. 中间件的前置和后置操作

逻辑在请求执行前,则是中间件前置操作

逻辑在请求执行后,则是中间件前置操作

你可能感兴趣的:(PHP,Laravel学习笔记)