Laravel HTTP 路由
路由配置文件
定义:路由是指分析来自客户端请求的统一资源标识符(URI),根据设定的规则将请求分发至期待的处理逻辑(匹配请求地址),这一规则就是路由规则,而这一过程就是路由。
Route::get(‘/’, function() {
return view(‘index’);
});
我们访问 http://yourdoamin/ 会显示渲染后的视图文件 index 的内容。这对于制作一个网站首页而言,十分简明,不需要再额外创建控制器。当然,如果首页是一类组织方法中的一部分,也可以用控制器实现。
直接访问静态页面:
Route::get(‘about’, function() {
return view(‘about’);
});
通过地址 http://yourdomain/about 访问到关于页面,该页面在视图 about 文件内定义的。
路由配置文件位置:app/Http/routes.php 。大多数基本的 Laravel 路由都只接受一个 URI 和 一个 (闭包(Closure),匿名函数?) 参数
如 闭包(一般很少用吧):
//访问网站根目录就回输出 hello world
Route::get(‘/’, function(){
return ‘Hello World’;
});
基本get 例子:
//指定 get 方式访问 http://域名.com/test ,该路由将指向 /app/Http/Controllers 下面的 TestController 控制器的 index 方法。
Route::get(‘/test’, ‘TestController@index’);
//如果项目庞大,通常都会对控制器分组(仅需在 /app/Http/Controllers 目录下新建分组目录即可)。如:/app/Http/Controllers/shop
Route::get(‘/shop’, ‘shop/TestController@index’);
路由访问方式
可以指定路由的访问方式: get 、 post 、 put 、 delete 。指定了访问方式,使用其他方式访问将会报错。
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’, ‘shop\ShopController@index’);
指定任意方式访问
Route::any(‘foo’, function(){
return ‘Hello World’;
});
Route::any(‘/shop’, ‘shop\ShopController@index’);
获取url地址 http://homestead.app/shop
$url = url(‘shop’);
访问方式欺骗(方法欺骗)
通常 HTML 表单没有支持 PUT 或 DELETE 请求,我们可以通过欺骗的方式达到 put delete 能访问
在 HTML 表单中被调用的时候,您将需要添加隐藏 _method 字段在表单中。 发送的 _method 字段对应的值会被当做 HTTP 请求方法
如:
<form action="/shop" method="POST"> <input type="hidden" name="_method" value="PUT"></form>
CSRF 保护
为了保护用程序不受到 CSRF (跨网站请求伪造) 攻击,Laravel 会自动在每一位用户的 session 中放置随机的 token ,这个 token 将被用来确保经过验证的用户是实际发出请求至应用程序的用户。
插入 CSRF Token 到表单
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
模板中使用
<input type="hidden" name="_token" value="{{ csrf_token() }}">
我们不需要手动验证 POST、PUT、DELETE 请求的 CSRF token。
VerifyCsrfToken HTTP 中间件将保存在 session 中的请求输入的 token 配对来自动验证 token 。
X-CSRF-TOKEN
除了寻找 CSRF token 作为「POST」参数,中间件也检查 X-XSRF-TOKEN 请求头。
比如,你可以把 token 存放在 meta 标签中, 然后使用 jQuery 将它加入到所有的请求头中:
<meta name="csrf-token" content="{{ csrf_token() }}" />
//jQuery.ajaxSetup() 方法设置全局 AJAX 默认选项。
$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') }});
所有的 AJAX 请求会自动加入 CSRF token:
$.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]+’);//限制参数只能是数字
使用多个条件限制数组
Route::get('user/{id}/{name}', function($id, $name){ //})->where(['id' => '[0-9]+', 'name' => '[a-z]+'])
定义全局模式
使用 pattern 方法。在 app/Providers/RouteServiceProvider 的 boot 方法里定义模式:
$router->pattern('id', '[0-9]+');
定义模式之后,会作用在所有使用这个特定参数的路由上:
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,再去阅读以下官方文档,基本就已经明白了。我就着上述的控制器、路由,来说明。先看一张表:
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
版权声明:本文为博主原创文章,未经博主允许不得转载。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











종종 키워드와 추적 매개 변수로 혼란스러워하는 긴 URL은 방문자를 방해 할 수 있습니다. URL 단축 스크립트는 솔루션을 제공하여 소셜 미디어 및 기타 플랫폼에 이상적인 간결한 링크를 만듭니다. 이 스크립트는 개별 웹 사이트 a에 유용합니다

Instagram은 2012 년 Facebook에서 유명한 인수에 이어 타사 사용을 위해 두 개의 API 세트를 채택했습니다. Instagram Graph API 및 Instagram Basic Display API입니다. 개발자는

Laravel은 직관적 인 플래시 방법을 사용하여 임시 세션 데이터 처리를 단순화합니다. 응용 프로그램에 간단한 메시지, 경고 또는 알림을 표시하는 데 적합합니다. 데이터는 기본적으로 후속 요청에만 지속됩니다. $ 요청-

이것은 Laravel 백엔드가있는 React Application을 구축하는 데있어 시리즈의 두 번째이자 마지막 부분입니다. 이 시리즈의 첫 번째 부분에서는 기본 제품 목록 응용 프로그램을 위해 Laravel을 사용하여 편안한 API를 만들었습니다. 이 튜토리얼에서는 Dev가 될 것입니다

Laravel은 간결한 HTTP 응답 시뮬레이션 구문을 제공하여 HTTP 상호 작용 테스트를 단순화합니다. 이 접근법은 테스트 시뮬레이션을보다 직관적으로 만들면서 코드 중복성을 크게 줄입니다. 기본 구현은 다양한 응답 유형 단축키를 제공합니다. Illuminate \ support \ Facades \ http를 사용하십시오. http :: 가짜 ([ 'google.com'=> 'Hello World', 'github.com'=> [ 'foo'=> 'bar'], 'forge.laravel.com'=>

PHP 클라이언트 URL (CURL) 확장자는 개발자를위한 강력한 도구이며 원격 서버 및 REST API와의 원활한 상호 작용을 가능하게합니다. PHP CURL은 존경받는 다중 프로모토콜 파일 전송 라이브러리 인 Libcurl을 활용하여 효율적인 execu를 용이하게합니다.

고객의 가장 긴급한 문제에 실시간 인스턴트 솔루션을 제공하고 싶습니까? 라이브 채팅을 통해 고객과 실시간 대화를 나누고 문제를 즉시 해결할 수 있습니다. 그것은 당신이 당신의 관습에 더 빠른 서비스를 제공 할 수 있도록합니다.

2025 PHP Landscape Survey는 현재 PHP 개발 동향을 조사합니다. 개발자와 비즈니스에 대한 통찰력을 제공하는 프레임 워크 사용, 배포 방법 및 과제를 탐색합니다. 이 조사는 현대 PHP Versio의 성장을 예상합니다
