検索

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

定義: ルーティングとは、クライアントからリクエストされた 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 までご連絡ください。
PHPの現在のステータス:Web開発動向を見てくださいPHPの現在のステータス:Web開発動向を見てくださいApr 13, 2025 am 12:20 AM

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHP対その他の言語:比較PHP対その他の言語:比較Apr 13, 2025 am 12:19 AM

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHP対Python:コア機能と機能PHP対Python:コア機能と機能Apr 13, 2025 am 12:16 AM

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHP:Web開発の重要な言語PHP:Web開発の重要な言語Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHP:多くのウェブサイトの基礎PHP:多くのウェブサイトの基礎Apr 13, 2025 am 12:07 AM

PHPが多くのWebサイトよりも優先テクノロジースタックである理由には、その使いやすさ、強力なコミュニティサポート、広範な使用が含まれます。 1)初心者に適した学習と使用が簡単です。 2)巨大な開発者コミュニティと豊富なリソースを持っています。 3)WordPress、Drupal、その他のプラットフォームで広く使用されています。 4)Webサーバーとしっかりと統合して、開発の展開を簡素化します。

誇大広告を超えて:今日のPHPの役割の評価誇大広告を超えて:今日のPHPの役割の評価Apr 12, 2025 am 12:17 AM

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPの弱い参照は何ですか、そしていつ有用ですか?PHPの弱い参照は何ですか、そしていつ有用ですか?Apr 12, 2025 am 12:13 AM

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

PHPで__invoke Magicメソッドを説明してください。PHPで__invoke Magicメソッドを説明してください。Apr 12, 2025 am 12:07 AM

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター