您当前的位置: 首页 >  ar

彭世瑜

暂无认证

  • 0浏览

    0关注

    2791博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Laravel表单篇-Request、Session、Response、Middleware

彭世瑜 发布时间:2019-12-01 16:56:05 ,浏览量:0

Laravel-表单篇 第1章 Controller 介绍

1、Request 2、Session 3、Response 4、Middleware

1、Request

Laravel请求使用的组件是symfony/http-foundatio 请求中存放了

$_GET 
$_POST
$_COOKIE
$_FILES
$_SERVER

获取请求中的值 判断请求类型

/**
 * 请求url  
 * http://127.0.0.1:8000/student/list?name=Tom
 */

// 取值
$request->input('name');
// Tom

// 取值,设置默认值
$request->input('age', 'default');
// default

// 判断是否有值
$request->has('name');
// true

// 取出所有参数
$request->all();
// { ["name"]=> "Tom" }

// 获取请求类型
$request->method();
// GET

// 判断请求类型
$request->isMethod('GET');
// true

// 判断是否为ajax请求
$request->ajax();
// false

// 判断路由格式
$request->is('student/*');
// true

// 获取当前url
$request->url();
// http://127.0.0.1:8000/student/list
2、Session

HTTP协议无状态 Stateless Session提供一种保存用户数据的方法

支持多种session后端驱动: Memcached、Redis、数据库

默认使用file的Session驱动 配置文件:config/session.php

启用Session中间件

Route::group(['middleware'=>['web']], function (){
    Route::get('student/list', 'StudentController@list');
});

使用方式 1、Request类session()方法 2、session()辅助函数 3、Session facade

使用示例

// 1、HTTP request
$request->session()->put('key', 'value');
$request->session()->get('key');

// 2、session()
session()->put('key', 'value');
session()->get('key');

// 3、Session
Session::put('key', 'value');
Session::get('key', 'default');

// 以数组的形式存储
Session::put(['key' => 'value']);

// 放到Session数组中
Session::push('key', 'value1');
Session::push('key', 'value2');

// 从Session中取数据,取出就删除
Session::pull('key', 'value');

// 取出所有值
Session::all();

// 判断存在
Session::has('key');

// 删除指定key的值
Session::forget('key');

// 清空
Session::flush();

// 暂存数据,第一次访问的时候存在
Session::flash('key', 'value');
3、Response

常见响应类型: 1、字符串 2、视图 3、Json 4、重定向

// json
$data = [
    'code': 0,
    'data': ['name' => 'Tom'],
    'msg': 'ok',
];
return response()->json($data);

// 重定向,
Route::get('student/list', [
    'as' => 'list', 
    'uses' =>'StudentController@list'
]);


return redirect('student/list');

// 携带Session快闪数据
return redirect('student/list')->with('key', 'value');

// action
return redirect()-action('StudentController@list');

// route
return redirect()-route('list');

// 返回上一页面
return redirect()-back();
4、Middleware

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

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

使用示例 需求: 活动开始前只能访问活动的-介绍页 活动开始后可以访问活动的-活动页

1、新建中间件 app/Http/Middleware/Active.php


namespace App\Http\Middleware;

use Closure;


class Active
{
    public function handle($request, Closure $next)
    {
        if (time()  \App\Http\Middleware\Active::class,
    ];
}

3、使用中间件 app/Http/Controllers/StudentController.php

namespace App\Http\Controllers;


use Illuminate\Http\Request;

class StudentController extends Controller
{
    function list(Request $request)
    {
       return '活动页';
    }

    function index(Request $request)
    {
        return '介绍页';
    }
}

routes/web.php

// 活动开始前可以访问活动首页
Route::get('student/index', 'StudentController@index');

// 活动开始后才能访问活动列表页
Route::group(['middleware'=>['active']], function (){
    Route::get('student/list', 'StudentController@list');
});

前置操作:请求执行前 后置操作:请求执行后


namespace App\Http\Middleware;

use Closure;


class Active
{
    // 前置操作
    public function handleBefore($request, Closure $next)
    {
        if (time()  'StudentController@index'
]);

Route::any('create', [
    'uses'=> 'StudentController@create'
]);

Route::post('save', [
    'uses'=> 'StudentController@save'
]);

Route::any('update/{id}', [
    'uses'=> 'StudentController@update'
]);

Route::any('detail/{id}', [
    'uses'=> 'StudentController@detail'
]);

Route::any('delete/{id}', [
    'uses'=> 'StudentController@delete'
]);

3、Model app/Student.php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Student extends Model
{

    // 定义常量
    const SEX_NULL = 0;
    const SEX_BOY = 1;
    const SEX_GIRL = 2;

    // 指定表名
    protected $table = 'student';

    // 指定主键
    protected $primaryKey = 'id';

    // 自动维护时间戳字段
    public $timestamps = true;

    // 指定允许批量赋值的字段
    protected $fillable = ['name', 'age', 'sex'];

    // 自定义保存时间戳格式
    public function getDateFormat()
    {
        return time();
    }

    // 解决 Call to a member function format() on string
    public function fromDateTime($val)
    {
        return empty($val) ? $val : $this->getDateFormat();

    }

    // 不自动格式化时间戳
    protected function asDateTime($value)
    {
        return $value;
    }

    public function getSex($key = null)
    {
        $arr = [
            self::SEX_NULL => '未知',
            self::SEX_BOY => '男',
            self::SEX_GIRL => '女',
        ];

        if ($key !== null) {
            return array_key_exists($key, $arr) ? $arr[$key] : $arr[self::SEX_NULL];
        } else {
            return $arr;
        }

    }
}

5、控制器 app/Http/Controllers/StudentController.php

namespace App\Http\Controllers;


use App\Student;
use Illuminate\Http\Request;

class StudentController extends Controller
{

    function index(Request $request)
    {
        // 分页每页数量
        $students = Student::paginate(20);

        return view('student/index',
            ['students' => $students]
        );
    }

    function create(Request $request)
    {
        if ($request->isMethod('POST')) {

            // 数据验证
            // 1、控制器验证
            // 通过会继续执行
            // 未通过会重定向到上一页面,抛出异常,错误信息存储到Session
            // $this->validate($request, [
            //     'Student.name' => 'required|min:2|max:20',
            //     'Student.age' => 'required|integer',
            //     'Student.sex' => 'required|integer',
            // ], [
            //     'required' => ':attribute 为必填项', // 占位符
            //     'integer' => ':attribute 必须为整数',
            //     'min' => ':attribute 长度不符合要求',
            // ], [
            //     'Student.name' => '姓名',
            //     'Student.age' => '年龄',
            //     'Student.sex' => '性别',
            // ]);

            // 2、Validator验证
            $validator = \Validator::make($request->input(), [
                'Student.name' => 'required|min:2|max:20',
                'Student.age' => 'required|integer',
                'Student.sex' => 'required|integer',
            ], [
                'required' => ':attribute 为必填项', // 占位符
                'integer' => ':attribute 必须为整数',
                'min' => ':attribute 长度不符合要求',
            ], [
                    'Student.name' => '姓名',
                    'Student.age' => '年龄',
                    'Student.sex' => '性别',
                ]
            );

            if ($validator->fails()) {
                // 数据保持
                return redirect()->back()->withErrors($validator)->withInput();
            }

            $data = $request->input('Student');

            // 需要设置模型批量赋值字段
            if (Student::create($data)) {
                return redirect('/')->with('success', '添加成功');
            } else {
                return redirect()->back();
            }

        } else {
            $student = new Student();

            return view('student/create', [
                'student' => $student
            ]);
        }
    }

    function save(Request $request)
    {
        $data = $request->input('Student');
        var_dump($data);
        $student = new Student();
        $student->name = $data['name'];
        $student->age = $data['age'];
        $student->sex = $data['sex'];

        if ($student->save()) {
            return redirect('/');
        } else {
            return redirect()->back();
        }
    }

    function update(Request $request, $id)
    {
        $student = Student::find($id);

        if ($request->isMethod('POST')) {
            $data = $request->input('Student');

            $student->name = $data['name'];
            $student->age = $data['age'];
            $student->sex = $data['sex'];

            if ($student->save()) {
                return redirect('/')->with('success', '修改成功-' . $id);
            }
        } else {
            return view('student/create', [
                'student' => $student
            ]);
        }

    }

    function detail(Request $request, $id)
    {
        $student = Student::find($id);

        return view('student/detail', [
                'student' => $student
            ]);
    }

    function delete(Request $request, $id)
    {
        $student = Student::find($id);

        if($student->delete()){
            return redirect('/')->with('success', '删除成功-' . $id);
        }



    }
}

6、视图 (1)公共布局 resources/views/common/layouts.blade.php



    
    Document - @yield('title')
    



@section('header')
    
        学生管理
    
@show


    

        @section('left')

                        
关注
打赏
1665367115
查看更多评论
0.2263s