程式CODE

2016年11月21日 星期一

laravel5.3-Routing

route寫在 ./routes/web.php


一、基本route

Route::get('foo', function () {
    return 'Hello World';
});















二、所有的method (http verbs請求)

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);

put,patch,delete,options請求用
<input type="hidden" name="_method" value="PUT">


{{ method_field('PATCH') }}


範例:

編輯 ./routes/web.php
Route::get('test','TestController@index');

新增controller
php artisan make:controller TestController --resource

編輯 ./app/Http/Controllers/TestController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TestController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        echo "測試一下!";
    }
...














三、若有多個method
Route::match(['get', 'post'], '/', function () { // });

四、若代表全部method
Route::any('foo', function () { // });

五、防範CSRF攻擊
會自動驗證token在post,put,delete請求

<form method="POST" action="/profile">
     <input type="hidden" value="'.csrf_token().'" name="_token">
    ...
</form>


https://zh.wikipedia.org/wiki/%E8%B7%A8%E7%AB%99%E8%AF%B7%E6%B1%82%E4%BC%AA%E9%80%A0





{{ csrf_field() }}




<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">

或在blade樣板
<input type="hidden" name="_token" value="{{ csrf_token() }}">


六、帶參數
//單一參數
Route::get('user/{id}', function ($id) {
    return 'User '.$id;
});

//多參數
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
    //
});


//可預設參數,此時name可有可無
Route::get('user/{name?}', function ($name = 'John') {
    return $name;
});


//限制參數
Route::get('user/{id}', function ($id) {
    return $name;
})->where('id','[0-9]+');


//如果大批where對id,以下所有route的id,都循[0-9]+的正規
Route::pattern('id','[0-9]+');


七、命名路由
Route::get('user/profile所命名', function () {
    //
})->name('frofile');

Route::get('user/profile', 'UserController@showProfile')->name('profile');


//尚未了解用法
$url = route('profile', ['id' => 1]);


//5.2版前的用法
Route::get('user/profile', ['as' => 'user.profile', 'uses' => 'TestController@index']);

八、群組
使用 Route::group
列如:
Route::group(['middleware' =>'{auth}'],function(){
  Route::get('/',function(){
    //程式碼
  });
  Route::get('user/profile',function(){
    //程式碼
  });
);
});


九、前綴
URI路徑就有一個前綴
Route::group(['prefix' => 'admin'], function () {
    Route::get('users', function ()    {
        // Matches The "/admin/users" URL
    });
});

沒有留言:

張貼留言