laravel基础--路由

laravel的路由是定义在/routes/web.php文件中

一 .自定义路由文件

1.在routes目录下新建一个路由文件引入 Illuminate\Support\Facades\Route;

2.注册路由文件,在 app\Providers\RouteServiceProvider.php编写方法并调用

路由注册


protected function mapLyRoutes()
{
    Route::middleware('web')
        ->namespace($this->namespace)
        ->group(base_path('routes/ly.php'));//路由文件地址
}

 在map方法中进行调用

     /**
     * Define the routes for the application.
     *
     * @return void
     */
    public function map()
    {
        $this->mapApiRoutes();
        $this->mapWebRoutes();
        $this->mapLyRoutes();

   
    }

二.使用路由

【注意 CSRF 保护】:
由于路由给提供了 CSRF 保护,所以要实现以上功能需要注释掉中间件中 CSRF 部分:
CSRF 保护:指向  web 路由文件中定义的  POST 、 PUT 或  DELETE 路由的任何 HTML 表单都应
该包含一个 CSRF 令牌字段,否则,这个请求将会被拒绝。
或者给该路由写入白名单【  app\Http\Middleware\VerifyCsrfToken.php 文件中写入路由名称】

1.添加路由标识

\Http\Middleware\VerifyCsrfToken.php;
<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::post('ceshi', function () {
    return '我是post方法';
});

 

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        //
        'ceshi',
    ];
}

2.注释中间件中 CSRF 部分

\app\Http\Kernel.php

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
//            \App\Http\Middleware\VerifyCsrfToken::class,//注释掉这个CSRF 部分
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

路由器允许你注册能响应任何 HTTP 请求的路由:

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

# 路由方法 路由标识 闭包
Route::get('foo', function () {
  return 'Hello World';
});
# 也可以路由到控制器:路由到 app\Http\Controllers\HelloController 控制器的hello方法
Route::get('foo', 'HelloController@hello');
有的时候你可能需要注册一个可响应多个 HTTP 请求的路由,这时你可以使用  match 方法,也可以使
用  any 方法注册一个实现响应所有 HTTP 请求的路由
 

# 能匹配到数组中的任意一种方式
Route::match(['get', 'post'], '/', function () {
  //
});
# 能匹配到任意一种方式
Route::any('/', function () {
  //
});

三.路由参数

3.1 必填参数
有时需要在路由中捕获一些 URL 片段。例如,从 URL 中捕获用户的 ID,可以通过定义路由参数来执行
此操作

Route::get('user/{id}', function ($id) {
  return 'User '.$id;
});

可以通过 http://lbl.com/user/1 访问以上方法, 1 代表的就是  id 的值, 当访问的时候没有传递该参
数则会出错,该参数必须传递。

也可以根据需要在路由中定义多个参数【 注意:传递的第一个参数对应参数列表的第一个参数 和名称
无关 】:

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

3.2 可选参数

有时,你可能需要指定一个路由参数,但你希望这个参数是可选的。你可以在参数后面加上?标记来实
现,但前提是要确保路由的相应变量有默认值

Route::get('user/{name?}', function ($name = null) {
  return $name;
});

以上内容通过 http://lbl.com/user 和 http://lbl.com/user/hello 访问, name 参数是可以选择性的传
递。

3.3. 路由正则
3.3.1 正则表达式约束

你可以使用路由实例上的  where 方法约束路由参数的格式。 where 方法接受参数名称和定义参数应如
何约束的正则表达式

// 使用正则表达式限定 name 参数必须是字母的
Route::get('user/{name}', function ($name) {
  //
})->where('name', '[A-Za-z]+');

Route::get('user/{name}/{age}', function ($name) {
  //
})->where(['name'=>'[A-Za-z]+','age'=>'[1-10]+']);

以上内容可以通过 http://lbl.com/user/hello 访问到却不能通过 http://lbl.com/user/123 访问。 

3.3.2 全局约束
如果你希望某个具体的路由参数都遵循同一个正则表达式的约束,就使用  pattern 方法在
\app\Providers\RouteServiceProvider.php 的  boot 方法中定义这些模式:

public function boot()
{
  Route::pattern('name','[a-z]+');
  parent::boot();
}

一旦定义好之后,便会自动应用这些规则到所有使用该参数名称的路由上

3.4

路由命名:可以方便地为指定路由生成 URL 或者重定向 。通过在路由定义上链式调用  name 方法可以
指定路由名称

Route::get('getu', function () {
  return \route('user');// 生成命名路由的URL
  // return redirect()->route('user'); // 也可以快速重定向到 user
});
Route::get('user', function () {
  return '路由标识';
})->name('user');

3.5.路由组

路由组允许你在大量路由之间共享路由属性,例如中间件或命名空间,而不需要为每个路由单独定义这
些属性。共享属性应该以数组的形式传入  Route::group 方法的第一个参数中。以下为常用共享属性
的具体说明:

2.5.1中间件

创建中间件

命令:php artisan make:middleware 中间件名称

中间件创建后会默认放入  app\Http\Middleware 目录。另外还需要把创建的中间件在
app\Http\Kernel.php 文件中注册才能使用

    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'test' => \App\Http\Middleware\Test::class,//注册中间件
    ];

注册之后就可以在路由中使用到中间件的内容了

namespace App\Http\Middleware;

use Closure;

class Test
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $request->name ='张三';
        return $next($request);
    }
}
Route::middleware(['test'])->group(function (){
    Route::get('ceshi',function (\Illuminate\Http\Request $request){
        return $request->name;
    });
});

在使用该中间的所有路由都会先执行中间件中的内容。

3.5.2. 命名空间
另一个常见用例是使用 namespace 方法将相同的 PHP 命名空间分配给路由组的中所有的控制器

Route::namespace('Admin')->group(function (){
   Route::get('useri',function(){
     return 'Admin1';
   });
    Route::get('userh',function(){
        return 'Admin2';
    });
});

可以分别通过 http://lbl.com/useri 和 http://lbl.com/userh 访问到 index 和 hello 方法

3.5.3. 路由前缀
可以用  prefix 方法为路由组中给定的 URL 增加前缀。例如,你可以为组中所有路由的 URI 加上
admin 前缀

Route::prefix('admin')->group(function () {
  Route::get('users', function () {
    //
 });
});

在访问的时候该路由组下的所有路由都需要加上 admin 作为前缀 http://lbl.com/admin/users。

name 方法可以用来给路由组中的每个路由名称添加一个给定的字符串。注意这里是给 路由名称 给前
缀而不是 路由标识。例如,希望以 admin 给所有的路由名称添加前缀

Route::name('admin.')->group(function (){
    Route::get('users',function (){
        return 'users';
    })->name('users');
    Route::get('goods',function (){
        return 'goods';
    })->name('goods');;
});
Route::get('ceshi',function (){
    return redirect()->route('admin.users'); // 也可以快速重定向到 users
});

3.5.4. 路由组

以上内容都可以以数组的形式传入  Route::group 方法的第一个参数中,也可以使用嵌套的方式组合
使用

Route::group(['namespace'=>'admin','prefix'=>'pre'],function(){
  Route::middleware('first')->group(function(){
    Route::get('users','AdminController@index');
 });
});

3.6. 回退路由
使用  Route::fallback 方法, 您可以定义一个在没有其他路由可匹配传入的请求时才执行的路由

Route::fallback(function (){
    return '未找到此地址';
});

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值