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

1. Controller

  • Request
  • Session
  • Response
  • Middleware

2. Request

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

  • Request中存放了:

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

代码如下:

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

<?php

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 '<p>' . $request->input('name') . '</p>'; 
        } else{
            echo '<p>不存在</p>'; 
        }
        //获取所有的参数
        $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. 主要要设置的内容:
<?php

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

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

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

3.4. 存取Session

<?php

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<br />';
            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

<?php

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 目录下

    <?php
    
    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中,添加:

    <?php
    
    namespace App\Http;
    
    use Illuminate\Foundation\Http\Kernel as HttpKernel;
    
    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. 中间件的前置和后置操作

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值