PHP路由、中间件

一、路由

/**
 * 定义一个/hi地址,返回hi的view
 */
Route::get('/hi', function()
{
    return View::make("hi");
});

/**
 * 定义一个/hello地址,带参数,默认参考值为Robin
 * 地址访问如:/hello/myname
 */
Route::get("/hello/{name?}", function($name = "Robin"){
    return "Hello " . $name;
});

/**
 * 定义一个地址:/test/2222
 * 使用正则匹配参数id
 */
Route::get("/test1/{id}", function($id) {
    return "ID value = " . $id;
})->where("id", "\d+");

/**
 * 定义一个地址:/test2/123/robin
 * 使用正则匹配多个参数
 */
Route::get("/test2/{id}/{name}", function($id, $name){
    return "ID = " . $id . ", Name = " . $name;
})->where(["id"=>"\d+", "name"=>"[a-zA-Z]+"]);

/**
 * 定义一个/as/my地址,给此路由加一个别名为mm
 */
Route::get("/as/my", ["as" => "mm", function(){
    // 输入当前路由的名称,如果路由没有给指定别名,返回空值
    return Route::currentRouteName();
}]);

//------------------------------------------------------------------
// 测试POST提交
//------------------------------------------------------------------
Route::get("/test", function(){
    return View::make("test");
});

Route::post("/test3", function(){
    // 取得POST的test文本框输入值
    //return $_POST["test"];
    // 取得所有POST的内容
    //return Input::all();
    // 取得指定文本框的输入值
    return Input::get("test");
});

//------------------------------------------------------------------
// 测试预定义PID为整型
//------------------------------------------------------------------
$router->pattern("pid", "\d+");
Route::get("/test4/{pid}", function($pid) {
    return "Pattern ID = " . $pid;
});

二、中间件

1,创建一个中间件

#在 /app/Http/Middleware 目录下生成一个TestMiddleware.php 的中间件
php artisan make:middleware TestMiddleware  

#编辑TestMiddleware类的内容
public function handle($request, Closure $next)
{
    if($request->input('age')<18)             //限制年龄小18岁的不能访问
        return redirect()->route('refuse');
    return $next($request);
}

2,注册一个中间件

创建完之后,我们要到 /app/Http/Kernal.php 中注册这个中间件,给他起个名字叫test:

#打开/app/Http/Kernal.php文件,追加TestMiddleware到Kernel的$routeMiddleware属性:
protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'test' => \App\Http\Middleware\TestMiddleware::class,
];

3,开始使用中间件

Route::group(['middleware'=>'test'],function(){
    Route::get('/write/laravelacademy',function(){
        //忽略这里
    });
    Route::get('/update/laravelacademy',function(){
       //忽略这里
    });
});

Route::get('/age/refuse',['as'=>'refuse',function(){
    return "十八禁!";
}]);

上面这段代码,我们访问 http://localhost//update/laravelacademy/1 的时候,页面会输出“ 十八禁!” 这时候已经自动跳转到 http://localhost/age/refuse 路由器上了。

注意上面用的是group 组路由,就是把多个路由做成一个集合,共用一点规则, group 里第一个参数是一个数组(php新版的写法方括号),里面给这个组绑定了一个 middleware 叫 test ,这个test 就是我们刚刚生成的中间件啦,这时候,中间件已经应用到 这个路由组里了。

猜你喜欢

转载自my.oschina.net/u/3670641/blog/1537779