Laravel - 路由


[ 1 - basic-view 路由 ]

//Url: http://localhost/sample/public/example1
//页面上就会显示
//Example-1

Route::get('/example1',function(){
    return 'Example - 1';
});

[ 2 - basic-view带参数的路由 ]

//Url: http://localhost/sample/public/example2/username/xianyu
//页面上就会显示
//Example - 2
//Your name is xianyu  

Route::get('/example2/username/{name}',function($name){
    $str = 'Example - 2 </br>';
    $str .= 'Your name is '.$name;
    return $str;
});

[ 3 - basic-view参数正则路由 ]

//Url: http://localhost/sample/public/example3/phone/135xxxxxx44
//页面上就会显示
//Example - 3
//Your phone is 135xxxxxx44

Route::get('/example3/phone/{number}', function ($number) {
    $str = 'Example - 3 </br>';
    $str .= 'Your phone is '.$number;
    return $str;
})->where(['number'=>'[0-9]{11}']);

[ 4 - basic-view自选参数路由 ]

//Url: http://localhost/sample/public/example4/rider/kabuto/sign/false/age
//页面上就会显示
//Example - 4
//kabuto ====> Cast On 10;

//这里有个问题就是,虽然有两个自选参数,但实际上应该是只有最后一个参数可以不填东西的。
//最后一个 '自选参数' 前的那些 '自选参数' 都是必填项目了。

Route::get('/example4/rider/{username}/sign/{sign?}/age/{age?}',function($username, $sign = false, $age = 10){
    if ($sign){
        $str = 'Example - 4 </br>';
        $str .= $username.' ====> Cast Off '.$age;
    } else {
        $str = 'Example - 4 </br>';
        $str .= $username.' ====> Cast On '.$age;
    }
    return $str;
});

[ 5 - 全局控制 ]

首先我们要前往 /app/Providers/RouteServiceProvider.php 在 boot()添加代码

<?php
...

public function boot()
{
    //路由参数的全局控制
    Route::pattern('Gatack', 'Gatack');
    parent::boot();
}

...

然后写路由,这个全局控制说明了,凡是 $Gatack 这个路由变量,只能输入Gatack, 否则就算错误路由。

//Url: http://localhost/sample/public/example5/rider/onlyname/Gatack
//页面上就会显示
//Example - 5
//Only Gatack;

Route::get('/example5/onlyname/{Gatack}', function($Gatack){
    $str = 'Example - 5 </br>';
    $str .= 'Only '.$Gatack;
    return $str;
});

[ 6 - 命名路由 ]

//Url: http://localhost/sample/public/example6
//页面上就会显示
//Hensin

Route::get('/example6',function(){
    $str = 'Hensin';
    return $str;
})->name('Hensin');

可以使用 php artisan route:list来查看现在有的路由

指定了名称的路由可以在代码中使用 route('name') 生成url字符串

有参数的时候,调用形式为route('name',['key1'=>'value1']);

[ 7 - CSRF保护 ]

//这里使用了 match ,让路由可以同时兼容多种方法
//在POST - PUT - DELETE 中必须使用 CSRF 做保护
//前端模板使用的时候可以写成 {!! csrf_field() !!}


//Url-get访问: http://localhost/sample/public/example7
//生成了一个表单
//Url-post访问: http://localhost/sample/public/example7
//根据表单提交来显示结果。


use Illuminate\Http\Request;
Route::match(['get', 'post'],'/example7',function(Request $request){
    $str = "";
    if ($request->isMethod('post')) {
        $str = "Input username is ".$request->username."</br>";
        $str .= "Input password is ".$request->password."</br>";
    }
    else if($request->isMethod('get')){
        $csrf = csrf_field();
        $str  = '<form method="POST" action="">';
        $str .= $csrf;
        $str .= '<input type="text" value="" name="username">User Name
                 <input type="password" value="" name="password">Password
                 <input type="submit" value="提交">
                 </form>';
    }
    return $str;
});

[ 8 - 路由组 ]

//A.命名空间
//B.中间件
//C.路由前缀

Route::group(['namespace' => 'admin'],function(){
    // 在 "App\Http\Controllers\Admin" 命名空间下的控制器
});
Route::group(['middleware' => 'auth'],function(){
    // 使用 `Auth` 中间件
});
Route::group(['prefix' => 'admin'], function () {
    Route::get('/example8', function ()    {
        // 匹配包含 "/admin/users" 的 URL
        return $str="Example - 8";
    });
});

[ 9 - basic-view带参数的路由 ]

//路由绑定了 RiderController 的 index 方法
//我们来生成一个 RiderController
//可用用上这个命令 php artisau make::controller [-option] name
//-r 的作用是生成一个资源控制器,包含Laravel 给你默认生成的方法
//运行 php artisau make::controller App\Http\Controllers\RiderController

Route::get('/rider','RiderController@index')->name('RiderList');

[ 10 - 资源路由 ]

运行 php artisau make::controller -r App\Http\Controllers\MonsterController

我们就会生成一个带有资源方法控制器, 大概如下所示

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;

class MonsterController extends Controller
{ 
    public function index()
    {
    }

    public function create()
    {
    }

    public function store(Request $request)
    {
    }

    public function show($id)
    {
    }

    public function edit($id)
    {
    }

    public function update(Request $request, $id)
    {
    }

    public function destroy($id)
    {
    }
}

我们路由就可以写成下面这样形式。

Route::resource('monster','MonsterController');

实际上等同于

Route::get('monster','MonsterController@index');
Route::get('monster','MonsterController@create');
Route::post('monster','MonsterController@store');
Route::get('monster','MonsterController@show');
Route::get('monster','MonsterController@edit');
Route::put('monster','MonsterController@update');
Route::delete('monster','MonsterController@destroy');

PS.A - 部分资源路由

//下面这种情况,只有 index 和 show 两个路由被生成出来
Route::resource('monster','MonsterController',['only' => [
    'index', 'show'
]]);

PS.B - 资源路由参数改名

//参数名字从 monster 改变成 admin_monster 
Route::resource('monster','MonsterController',['parameters' => [
    'monster' => 'admin_monster']]
);

PS.C 更改路由命名

//这个时候 create 路由的路由名字变成  photo.build 了。
//route('photo.build'); 当你这样使用的时候, 其实生成的是 monster 的 create 路由连接.
Route::resource('monster','MonsterController',['names' => [
    'create' => 'photo.build'
]]);

个人觉得,不要使用什么资源路由,偷懒又阻碍阅读。

认认真真的写好每一条最好。

[ 11 - 路由模型绑定 ]

当传入rider 的主键ID值的时候,可以直接就通过模型获得数据了。

Route::get('rider/detail/{rider}',function(App\Http\models\rider $rider){
    $str  = "";
    $str .= "Name: ".$rider->name."<br/>";
    $str .= "Height: ".$rider->height."<br/>";
    $str .= "Weight: ".$rider->weight."<br/>";
    $str .= "Boxing: ".$rider->boxing."<br/>";
    $str .= "Kick: ".$rider->kick."<br/>";
    $str .= "Speed: ".$rider->speed."<br/>";
    $str .= "Jump: ".$rider->jump."<br/>";
    return $str;
});

results matching ""

    No results matching ""