目次
ルーティング設定ファイル
ルート アクセス メソッド
ルート アクセス メソッド: get、post を指定できます。 、置く、削除する。アクセス方法を指定した場合、他の方法でアクセスするとエラーとなります。
複数のアクセス方法を指定することもできます
アクセス方法を指定してください
アクセスメソッドスプーフィング (メソッドスプーフィング)
CSRF 保護
X-CSRF-TOKEN
ルーティング パラメーター
基本的なルーティング パラメーター (パラメーターが渡されない場合、エラーが報告されます)
選択可能なルートパラメータ
デフォルト値のルートパラメータ
正規表現を使用してパラメータを制限
複数の条件を使用して配列を制限します
グローバル パターンを定義します
路由别名。(方便生成url和重定向)
为控制器动作指定路由名称:
控制器路由
资源控制器
路由组
中间件路由 Middleware
命名空间路由 Namespaces
子域名路由
注册一个 URL 参数到路由前缀
路由模型绑定
Laravel 模型绑定提供方便的方式将模型实体注入到您的路由中。
如果您想要自定「没有找到」的行为,将闭包作为第三个参数传入 model 方法:
如果您想要使用您自己决定的逻辑,您应该使用 Route::bind方法。
抛出 404 错误

Laravel HTTPルーティング

Jun 23, 2016 pm 01:28 PM

ルーティング設定ファイル

定義: ルーティングとは、クライアントからリクエストされた URI (Uniform Resource Identifier) を解析し、設定されたルールに従って、期待される処理ロジック (リクエスト アドレスに一致する) にリクエストを振り分けることを指します。ルーティング ルール。このプロセスがルーティングです。

Route::get('/', function() {
return view('index');
});

http://yourdoamin/ にアクセスすると、レンダリングされたビュー ファイル インデックスの内容は次のようになります。表示されます。これは Web サイトのホームページを作成する場合に非常に簡単で、追加のコントローラーを作成する必要はありません。もちろん、ホームページが一種の編成メソッドの一部である場合は、コントローラーを使用して実装することもできます。

静的ページに直接アクセスします:

Route::get('about', function() {
return view('about');
});

アドレス http://yourdomain から about ページにアクセスします/about 、このページはビュー about ファイルで定義されます。

ルーティング設定ファイルの場所: app/Http/routes.php。ほとんどの基本的な Laravel ルートは、1 つの URI と 1 つの (クロージャー、匿名関数?) パラメーターのみを受け入れます。

クロージャー (通常はほとんど使用されません) など:

//Web サイトのルート ディレクトリにアクセスすると、hello world が出力されます

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

基本的な get の例:

// http://ドメイン名.com/test にアクセスするための get メソッドを指定します。ルートは、/app/Http/Controllers の下にある TestController コントローラーのインデックス メソッドを指します。

Route::get('/test', 'TestController@index');

//プロジェクトが大きい場合、コントローラーは通常グループ化されます (/app/Http/Controllers ディレクトリの下に新しいグループ ディレクトリを作成するだけです) )。例: /app/Http/Controllers/shop

Route::get('/shop', 'shop/TestController@index');

ルート アクセス メソッド

ルート アクセス メソッド: get、post を指定できます。 、置く、削除する。アクセス方法を指定した場合、他の方法でアクセスするとエラーとなります。

Route::get('/', function(){
return 'Hello World';
});
Route::post('/', function(){
return 'Hello World';
}); ;
Route::put('/', function(){
return 'Hello World';
});
Route::delete('/', function(){
return 'Hello World';
}) ;

複数のアクセス方法を指定することもできます

次のように: get または post アクセスが許可されます

Route::match(['get', 'post'], '/', function(){
return ' Hello World';
});
Route::match(['get', 'post'], '/shop', 'shopShopController@index');

アクセス方法を指定してください

Route::any( 'foo ', function(){
return 'Hello World'
});
Route::any('/shop', 'shopShopController@index');

URL アドレスを取得します http://homestead.app /shop

$url = url('shop');

アクセスメソッドスプーフィング (メソッドスプーフィング)

通常、HTML フォームは PUT または DELETE リクエストをサポートしていませんが、スプーフィングによって put delete アクセスを実現できます

は HTML で使用されますフォームを呼び出すときは、hidden_​​method フィールドをフォームに追加する必要があります。 送信された _method フィールドに対応する値は、HTTP リクエスト メソッドとして扱われます

例:

<form action="/shop" method="POST">    <input type="hidden" name="_method" value="PUT"></form>
ログイン後にコピー

CSRF 保護

アプリケーションを CSRF (クロスサイト リクエスト フォージェリ) 攻撃から保護するために、Laravel は自動的に各ユーザーのセッションでのリクエスト にランダムなトークンを配置します。このトークンは、認証されたユーザーが実際にアプリケーションにリクエストを行ったユーザーであることを確認するために使用されます。

CSRF トークンをフォームに挿入します

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
ログイン後にコピー

テンプレートで

<input type="hidden" name="_token" value="{{ csrf_token() }}">
ログイン後にコピー
を使用します

POST、PUT、DELETE リクエストの CSRF トークンを手動で検証する必要はありません。

VerifyCsrfToken HTTP ミドルウェアは、セッションに保存されているリクエスト入力トークンをペアにして、トークンを自動的に検証します。

X-CSRF-TOKEN

ミドルウェアは、「POST」パラメータとして CSRF トークンを検索することに加えて、X-XSRF-TOKEN リクエスト ヘッダーもチェックします。

たとえば、トークンをメタ タグに保存し、jQuery を使用してそれをすべてのリクエスト ヘッダーに追加できます。

<meta name="csrf-token" content="{{ csrf_token() }}" />
ログイン後にコピー

//jQuery.ajaxSetup() メソッドは、グローバル AJAX デフォルト オプションを設定します。

$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }});
ログイン後にコピー

すべての AJAX リクエストは、CSRF トークンを自動的に追加します:

$.ajax({ url: "/foo/bar",})
ログイン後にコピー

ルーティング パラメーター

基本的なルーティング パラメーター (パラメーターが渡されない場合、エラーが報告されます)

Route::get('/user/{id}', function($id){    return 'User '.$id;});Route::get('/shop/{id}', 'shop\ShopController@index');
ログイン後にコピー

コントローラー メソッド内

function index($id){    echo $id}
ログイン後にコピー

注: ルーティング パラメーター- 文字を含めることはできません。 (_) の代わりにアンダースコアを使用してください。

選択可能なルートパラメータ

Route::get('/shop/{id}', function($id = null){    return $id;});Route::get('/shop/{id?}', 'shop\ShopController@index'); 
ログイン後にコピー

コントローラメソッド内

function index($id=null){    echo $id}
ログイン後にコピー

デフォルト値のルートパラメータ

Route::get('/shop/{id}', function($id = 1){    return $id;});Route::get('/shop/{id?}', 'shop\ShopController@index'); 
ログイン後にコピー

コントローラメソッド内

function index($id=1){    echo $id}
ログイン後にコピー

正規表現を使用してパラメータを制限

Route::get('user/{name}', function($name){    return $name;})->where('name', '[A-Za-z]+');//限制参数只能是大小写字母Route::get('user/{id}', function($id){    return $id;})
ログイン後にコピー

->where('id' , '[0- 9]+');//パラメーターを数値のみに制限します

複数の条件を使用して配列を制限します

rrree

グローバル パターンを定義します

パターン メソッドを使用します。 app/Providers/RouteServiceProvider のブート メソッドでパターンを定義します:

Route::get('user/{id}/{name}', function($id, $name){    //})->where(['id' => '[0-9]+', 'name' => '[a-z]+'])
ログイン後にコピー

パターンを定義すると、この特定のパラメーターを使用するすべてのルートに適用されます:

Route::get('user/{id}', function($id){    // 只有 {id} 是数字才被调用。});
ログイン後にコピー

路由别名。(方便生成url和重定向)

Route::get('user/profile', ['as' => 'profile', function(){    //}]);
ログイン後にコピー

为控制器动作指定路由名称:

Route::get('shop/index', [    'as' => 'center', 'uses' => 'shop\ShopController@index']);
ログイン後にコピー

//控制器中使用

$url = route('center');echo $url;  // http://homestead.app/shop/index$redirect = redirect()->route('center');echo $redirect;重定向
ログイン後にコピー

currentRouteName 方法会返回目前请求的路由名称:$name = Route::currentRouteName();

控制器路由

控制器路由我认为主要是解决路由定义繁杂的情况,因为大型的应用业务复杂,控制器相当的多,我们不可能每一个控制器的方法都要定义一个路由。Laravel 的控制器路由可以完美解决问题

Route::controller('/', 'HomeController');
ログイン後にコピー

控制器方法的写法也要有所变化:

/** * 显示首页。 * * @return Response */public function getIndex(){    return view('home');}/** * 显示关于界面 * * @return Response */public function getAbout(){    return view('about');}
ログイン後にコピー

前缀 get,post, any 等

资源控制器

Laravel 的资源控制器原生的支持了 RESTful 架构。其实 laravel 的资源控制器和其他控制器没什么直接区别,只是对控制器类的方法和结构略有规定,不过我们并不要手动创建资源控制器,我们可以利用 laravel 的命令行工具 ?? artisan。

php artisan make:controller ArticleController
ログイン後にコピー

就可以创建一个名为 ArticleController 的资源控制器,文件默认在 app/Http/Controllers 下。我们打开 ArticleController.php,发现里面已经写好了许多方法,比如 index、create、show 等等。分别是什么意思?如何在路由定义才能访问到?

Route::resource('article', 'ArticleController');
ログイン後にコピー

访问的地址规则呢?如果你已经了解了 RESTful,再去阅读以下官方文档,基本就已经明白了。我就着上述的控制器、路由,来说明。先看一张表:

请求方法 请求 URI 对应的控制器方法 代表的意义
GET /article index 索引/列表
GET /article/create create 创建(显示表单)
POST /article store 保存你创建的数据
GET /article/{id} show 显示对应id的内容
GET /article/{id}/edit edit 编辑(显示表单)
PUT/PATCH /article/{id} save 保存你编辑的数据
DELETE /article/{id} destroy 删除

当定义了个资源路由 Route::resource(‘article’, ‘ArticleController’);。

访问地址 http://yourdomain/article ,相当于访问控制器 ArticleController 的 index 方法。

访问地址 http://yourdomain/article/create ,就会访问到 create 方法。

通过 POST 提交数据至地址 http://yourdomain/article,相当于由 store 方法处理。

路由组

中间件路由 Middleware

app/Http/Kernel.php 中的 $middleware 数组是全局中间件,也就是说,任何一条路由都会被应用这些中间件,比如里面的CSRF验证中间件。

有时候我们不需要全局中间件,这时候可以将某一个中间件注册至 app/Http/Kernel.php 文件中的 $routeMiddleware 数组,数组的键名是中间件的别名,键值是具体的中间件类,如

'auth' => 'App\Http\Middleware\AuthMiddleware'
ログイン後にコピー

我们在 app/Http/Kernel.php 文件中的 $routeMiddleware 数组注册了一个独立中间件,这一中间件可被单独用绑定在一个路由和路由组上。在路由定义的时候可以像这样:

Route::get('admin/profile', ['middleware' => 'auth', function(){    //}]);
ログイン後にコピー

当我们访问 http://yourdomain/admin/profile 的时候,首先会经过全局中间件,然后就是我们在 app/Http/Kernel.php 的 $routeMiddleware 数组中定义的名称为 auth 的中间件。

在群组共享属性数组的 middleware 参数定义中间件列表,这些中间件就会应用到群组内的所有路由上。

中间件将会按在列表内指定的顺序执行:

Route::group(['middleware' => ['foo', 'bar']], function(){        Route::get('/', function() {                // Has Foo And Bar Middleware     });        Route::get('user/profile', function() {                // Has Foo And Bar Middleware     });});
ログイン後にコピー

命名空间路由 Namespaces

在 group 属性数组中使用 namespace 参数,指定在这群组中控制器的命名空间:

Route::group(['namespace' => 'Admin'], function(){        // Controllers Within The "App\Http\Controllers\Admin" Namespace     Route::group(['namespace' => 'User'], function() {                // Controllers Within The "App\Http\Controllers\Admin\User" Namespace     });});
ログイン後にコピー

注意: 在默认情况下, app/Providers/RouteServiceProvider 包含内置您命名空间群组的 routes.php 文件,无需使用完整的 App\Http\Controllers 命名空间前缀就可以注册控制器路由。

子域名路由

Route::group(['domain' => '{account}.homestead.app'], function(){      Route::get('shop/{id}', function($account, $id) {                return 'domain:'.$account.'===='.'id:'.$id;        });});
ログイン後にコピー

访问:http://myapp.homestead.app/shop/users

路由前缀

Route::group(['prefix' => 'shop'], function(){        Route::get('users', function() {             //return 111;         // Matches The "/admin/users" URL     });});
ログイン後にコピー

访问:homestead.app/shop/users

注册一个 URL 参数到路由前缀

Route::group(['prefix' => 'shop/{account_id}'], function(){        Route::get('users', function($account_id) {                return $account_id;                //     });});
ログイン後にコピー

访问:homestead.app/shop/22/users

你甚至可以在前缀中为已命名的参数定义限制:

Route::group([          'prefix' => 'shop/{account_id}',             'where' => ['account_id' => '[0-9]+'],      ],      function(){            Route::get('users', function($account_id) {                    return $account_id;                    //    });});
ログイン後にコピー

//访问:homestead.app/shop/22/users

路由模型绑定

Laravel 模型绑定提供方便的方式将模型实体注入到您的路由中。

例如,比起注入 User ID ,你可以选择注入符合给定 ID 的 User 类实体。

使用路由的 model 方法指定特定参数要对应的类,在 app/Providers/RouteServiceProvider::boot 方法定义您的模型绑定:

public function boot(Router $router){    parent::boot($router);    $router->model('user', 'App\User');}
ログイン後にコピー

然后定义一个有 {user} 参数的路由:

Route::get('profile/{user}', function(App\User $user){    //});
ログイン後にコピー

注意: 如果在数据库中找不到匹配的模型实体,将引发 404 错误。

如果您想要自定「没有找到」的行为,将闭包作为第三个参数传入 model 方法:

Route::model('user', 'User', function(){    throw new NotFoundHttpException;});
ログイン後にコピー

如果您想要使用您自己决定的逻辑,您应该使用 Route::bind方法。

闭包通过 bind 方法将传递 URI 区段数值,并应该返回您想要被注入路由的类实体:

Route::bind('user', function($value){    return User::where('name', $value)->first();});
ログイン後にコピー

抛出 404 错误

Route::get('/shop/{id}', function($id){    //return 'User '.$id;    abort(404);});
ログイン後にコピー

在控制器使用 abort 辅助函数手动触发 404 错误。

abort(404);
ログイン後にコピー

自定义错误页面

resources/views/errors/404.blade.php
ログイン後にコピー

版权声明:本文为博主原创文章,未经博主允许不得转载。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

11ベストPHP URLショートナースクリプト(無料およびプレミアム) 11ベストPHP URLショートナースクリプト(無料およびプレミアム) Mar 03, 2025 am 10:49 AM

多くの場合、キーワードと追跡パラメーターで散らかった長いURLは、訪問者を阻止できます。 URL短縮スクリプトはソリューションを提供し、ソーシャルメディアやその他のプラットフォームに最適な簡潔なリンクを作成します。 これらのスクリプトは、個々のWebサイトにとって価値があります

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

2025 PHP状況調査の発表 2025 PHP状況調査の発表 Mar 03, 2025 pm 04:20 PM

2025 PHP Landscape Surveyは、現在のPHP開発動向を調査しています。 開発者や企業に洞察を提供することを目的とした、フレームワークの使用、展開方法、および課題を調査します。 この調査では、現代のPHP Versioの成長が予想されています

Laravelの通知 Laravelの通知 Mar 04, 2025 am 09:22 AM

この記事では、Laravel Webフレームワークの通知システムを検討します。 Laravelの通知システムを使用すると、さまざまなチャネルでユーザーに通知を送信できます。今日は、通知ovを送信する方法について説明します

See all articles