Laravel5.2学习笔记---Controller介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/self_realian/article/details/79835728

一、Controller之Request
在之前的使用中,其实每次访问都是一个请求(request),请求之后返回到浏览器的都是一个响应(response)。
Laravel中的请求使用的是symfony/http-foundation组件。
请求里边存放了$_GET、$_POST、$_COOKIE、$_FILES、$_SERVER等数据

以下需要引入的命名空间有:

use Illuminate\Support\Facades\DB;

use App\Student;//记得添加这个

use Illuminate\Http\Request;

use Illuminate\Support\Facades\Session;

use Illuminate\Contracts\Routing\ResponseFactory;

在StudentController.php中添加一个方法如下:
public function request1(Request $request){//记得添加路由
        //取值
        // echo $request->input('sex', '未知');//第二个参数是默认值
        // //判断是否有这个值
        // echo "<br />";
        // if($request->has('name')){
        //  echo $request->input('name');//http://www.laravel52.com/request1?name=kfgf
        // }else{
        //  echo "没有该参数";
        // }

        // //取url中所有的参数
        // $res = $request->all();
        // dd($res);
        //判断请求类型
        // echo $request->method();
        // echo "<br />";
        // //判断指定请求类型,是不是需要的类型
        // if($request->isMethod('GET')){
        //  echo "YES";
        // }else{
        //  echo "NO";
        // }

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

        //判断请求路径是否符合特定的格式
        $res1 = $request->is('student/*');//判断是不是student控制器下的某个方法
        var_dump($res1);

        //获取当前url
        $url = $request->url();
        var_dump($url);
    }

二、Controller之Session
1,由于HTTP协议是无状态(Stateless)的,所以session提供一种保存用户数据的方法
2,Laravel支持多种session后端驱动,并提供清楚、统一的API。也内置支持Memcached、Redis和数据库的后端驱动。默认使用”file”的Session驱动
3,session的配置文件在config/session.php

Laravel中使用session有三种方式

1,HTTP request类的session方法

2,session()辅助函数

3,Session facade

在StudentController.php中添加下边两个函数
public function session1(Request $request){
        //1,HTTP request类的session方法
        //$request->session()->put('key1', 'value1');//向session中放一个值


        //2,session()辅助函数
        //session()->put('key2', 'value2');

        //3,Session facade
        //Session::put('key3', 'value3');

        //以数组的形式向session中存值
        // Session::put(['key4' => 'value4', 'key5' => 'value5']);

        //把数据放到session数组中
        // Session::push('stu', 'shulv1');
        // Session::push('stu', 'shulv2');

        //暂存,如果想第一次访问的时候存在,第二次访问的时候就不存在
        Session::flash('key-flash1', 'value-flash1');

    }   
    public function session2(Request $request){
        //在这里取出在session1中放置到session的值
        //echo $request->session()->get('key1');
        //echo session()->get('key2');
        //echo Session::get('key3', 'default');//当某个要取的session不存在,可以添加第二个参数,指定默认值

        // echo Session::get('key4', 'default');
        // echo Session::get('key5', 'default');

        // $res = Session::get('stu');
        // var_dump($res);//返回的是一个数组

        //假设想取出一个数据,就把它删了
        // $res = Session::pull('stu');
        // var_dump($res);

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

        //取出一个值的时候,判断一下是否存在
        // if(Session::has('key1')){
        //  echo "key1存在";
        // }

        //删除某个session
        // Session::forget('key1');
        // if(Session::has('key1')){
        //  echo "key1存在";
        // }else{
        //  echo "key1不在了";
        // }

        //删除Session中所有的数据
        // Session::flush();

        // echo Session::get('key-flash1');
    }   
app/Http/routes.php  添加
//在PHP中,使用session需要session_start才能使用
//在Laravel中的app/Http/Kernel.php中有一个叫 middlewareGroups的数组,里边有一个索引是'web',里边有StartSession,只需要将它加上去就可以了
Route::group(['middleware' => ['web']], function() {
    Route::any('session1', ['uses'=>'StudentController@session1']);
    Route::any('session2', ['uses'=>'StudentController@session2']);
});

三、Controller之Response
响应的常见类型:字符串、视图、Json、重定向

StudentController.php

public function response(){//记得添加路由  注意这里的函数名必须要是response,否则下边的重定向传值会传不过去,我这里路由没有放到session的路由群组中,可以传参
        $data = [
            'errCode' => 0,
            'errMsg'  => 'success',
            'data'    => 'shulv'
        ];
        //响应数组

        //var_dump($data);//此时打印出的是数组形式
        //怎样以Json形式输出

        //响应Json
        //return response()->json($data);//有了这个功能,开发数据接口就很方便了

        //重定向(假设这里要重定向到session2函数中)
        // return redirect('session2');//这个时候访问resopnse1就会跳转到session2方法中
        //重定向时带一些信息
        //return redirect('session2')->with('message1', '快闪数据');//原理就是session中的flash

        //在控制器中跳转的其它方法 action()、route()(通过路由别名跳转)
        //return redirect()->action('StudentController@session2');//后边也是可以加上with函数来传递数据

        //return redirect()->route('sess2');//后边也是可以加上with函数来传递数据

        //返回上一个页面
        //return redirect()->back();

    }

四、Controller之Middleware

中间件的作用:
1,Laravel中间件提供一个方便的机制来过滤进入应用程序的HTTP请求
例子:有一个活动,在指定日期后开始,如果活动没开始只能访问宣传页面
涉及到:新建中间件、注册中间件、使用中间件、中间件的前置和后置操作

StudentController.php中新建以下方法
//活动宣传页面
    public function activity0(){//记得添加路由
        return "活动快要开始了,敬请期待";
    }

    public function activity1(){//记得添加路由
        return "活动进行中,谢谢您的参与1";
    }

    public function activity2(){//记得添加路由
        return "活动进行中,谢谢您的参与2";
    }
    //现在新建一个中间件,在app/Http/Middleware下创建一个Activity.php文件
Activity.php

<?php

namespace App\Http\Middleware;

use Closure;

class Activity{
    /*
        如何区别前置操作还是后置操作,就看中间件的逻辑是在请求执行前还是执行后执行
    */
    //前置操作
    // public function handle($request, Closure $next){//注意:这个方法是固定的 $next是一个全局包
    //  if(time() < strtotime('2018-04-10')){
    //      return redirect('activity0');
    //  }

    //  return $next($request);
    // }//写好之后去注册  app\Http\Kernel.php中的 $routeMiddleware下添加

    //后置操作
    public function handle($request, Closure $next){
        $res = $next($request);
        //var_dump($res);

        //逻辑
        echo "我是后置操作";
    }
}

app\Http\Kernel.php添加
这里写图片描述
在路由文件中添加(app\Http\routes.php)
这里写图片描述

猜你喜欢

转载自blog.csdn.net/self_realian/article/details/79835728