Laravel 入门:04-路由

laravel 路由(Route),路由方法,路由分组(group),路由命名(name),路由前缀(prefix),路由中间件(middleware)

hefengbao 发布于 2022.12.12 ,最后更新于 2023.09.18

一、基本路由

所有的路由文件都位于 routes 目录下,routes/web.php 中已经定义好了一个路由:

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

但是一般情况下,格式为:Route::路由方法('uri', ['控制器','方法'])->name('路由命名') ;

假设有控制器 app/Http/Controllers/UserController::class

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    public function index()
    {
        echo 'Hello, World!';
    }

    public function create()
    {

    }

    public function store(Request $request)
    {

    }

    public function edit($id)
    {

    }

    public function update($id, Request $request)
    {

    }

    public function show($id)
    {
      echo $id;
    }

    public function destroy($id)
    {
        
    }
}

则可以定义路由:

Route::get('/users',[\App\Http\Controllers\UserController::class, 'index'])->name('users.index');
Route::get('/users/create', [\App\Http\Controllers\UserController::class, 'create'])->name('users.create');
Route::post('/users', [\App\Http\Controllers\UserController::class, 'store'])->name('users.store');
Route::get('/users/{id}', [\App\Http\Controllers\UserController::class, 'show'])->name('users.show');
Route::get('/users/{id}/edit', [\App\Http\Controllers\UserController::class, 'edit'])->name('users.edit');
Route::put('/users/{id}', [\App\Http\Controllers\UserController::class, 'update'])->name('users.update');
Route::delete('/users/{id}', [\App\Http\Controllers\UserController::class, 'destroy'])->name('user.destroy');

访问 http://laravel-demo.test/users/index

二、路由方法

常用的 get,post,put, patch, delete, options 和 HTTP 方法一一对应,可参照理解。

三、路由参数

Route::get('/users/{id}', [\App\Http\Controllers\UserController::class, 'show'])->name('users.show') 中的 id 即为路由参数, 访问的url 为: http://laravel-demo.test/users/1 , id 必须有值,如果 id 可以为空,则可以这样定义:

Route::get('/users/{id?}', [\App\Http\Controllers\UserController::class, 'show']);

一个路由中可以有多个参数,比如:

Route::get('/users/{id}/comments/{commentId}', [\App\Http\Controllers\UserController::class, 'show']);

对应到控制器中:

class UserController extends Controller
{
  //这里的参数命名可以和路由中的参数命名不一样,但要记得,顺序是一样的,第一个参数获取的一定是 id, 第二个参数是commentId
  public function show($id, $commentId){}
}

四、路由命名

在路由中使用 name() 方法给该路由命名,比如:

Route::get('/users/{id}', [\App\Http\Controllers\UserController::class, 'show'])->name('users.show');

路由命名的使用:

class UserController extends Controller
{
  public function index()
  {
     echo route('name.index');
   }

  public function show($id)
  {
     echo route('name.show', $id);
      // 或者
     echo route('name.show', ['id' => $id]);
   } 
}

五、路由分组(前缀、中间件)

路由前缀、路由中间件都是结合路由分组使用,比如管理后台的路由:

Route::prefix('admin')->group(function(){
  Route::get('/', [\app\Http\Controllers\Admin\HomeController::class, 'index']);
});

如果项目很复杂,管理后台的路由可单独放在一个文件中,在 routes 目路中,新建 admin.php, 然后再 app/Providers/RouteServiceProvider::classboot 方法中添加:

$this->routes(function () {
  ...
  
  // 仿照添加即可
  Route::middleware('web')
    ->prefix('admin')
    ->group(base_path('routes/admin.php'));
});

路由中间件后面再说。

Demo:https://github.com/hefengbao/laravel-demo

https://laravel-news.com/managing-routes

Laravel    Laravel   Laravel 入门  

hefengbao

暂无个人简介

有0条评论

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

来源:

https://www.8ug.icu/articles/laravel-tutorial-04-routes-xV70Yy0WNY