Laravel学习笔记汇总——路由管理

13 篇文章 1 订阅
13 篇文章 0 订阅

## Laravel学习笔记汇总——路由管理


// 在routes/web.php中,定义网站访问路由。
use App\Http\Controllers\UserController;
Route::get('/user', [UserController::class, 'index']);

// 可用的Route方法有:
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::match(['get', 'post'], '/', function () {
    //
});

Route::any('/', function () {
    //
});


// 重定向路由
Route::redirect('/here', '/there');

// 重定向路由并自定义返回的状态码,默认是302
Route::redirect('/here', '/there', 301);


// 如果路由仅需要返回一个视图:
Route::view('/welcome', 'welcome');
Route::view('/welcome', 'welcome', ['name' => 'Taylor']); # 传递数据

// 将路由中的参数传入回调函数:
Route::get('/posts/{post}/comments/{comment}', function ($postId, $commentId) {
    //
});

// 如果回调函数中有其他参数,则路由参数放在这些参数后面。
use Illuminate\Http\Request;
Route::get('/user/{id}', function (Request $request, $id) {
    return 'User '.$id;
});


// 如果路由参数为可选,则需要在路由中参数名后另上?,回调函数中添加默认值
Route::get('/user/{name?}', function ($name = null) {
    return $name;
});

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


// 为路由参数设置正则表达式限制
Route::get('/user/{name}', function ($name) {
    //
})->where('name', '[A-Za-z]+');

Route::get('/user/{id}', function ($id) {
    //
})->where('id', '[0-9]+');

Route::get('/user/{id}/{name}', function ($id, $name) {
    //
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);


// 一些常用的正则表达式限制,可以使用辅助函数
Route::get('/user/{id}/{name}', function ($id, $name) {
    //
})->whereNumber('id')->whereAlpha('name');

Route::get('/user/{name}', function ($name) {
    //
})->whereAlphaNumeric('name');

Route::get('/user/{id}', function ($id) {
    //
})->whereUuid('id');

// 全局的参数限制,需要在App\Providers\RouteServiceProvider中的boot里设置
public function boot()
{
    Route::pattern('id', '[0-9]+');
}
// 有了上面这个设置后,路由中就不用为每一个id设置限制了
Route::get('/user/{id}', function ($id) {
    // Only executed if {id} is numeric...
});


// 给路由取一个独特的名字
Route::get('/user/profile', function () {
    //
})->name('profile');

Route::get(
    '/user/profile',
    [UserProfileController::class, 'show']
)->name('profile');

// 从名字得到路由URL
$url = route('profile');

// 使用名字生成重定向
return redirect()->route('profile');

// 带参数的路由取名后,生成URL时通过第二个参数提供数据
Route::get('/user/{id}/profile', function ($id) {
    //
})->name('profile');

$url = route('profile', ['id' => 1]);

// 这时如果提供的参数多于路由中所需的参数,多出的将成为query string,如:
$url = route('profile', ['id' => 1, 'photos' => 'yes']);
// /user/1/profile?photos=yes

// 使用路由分组,添加中间件
Route::middleware(['first', 'second'])->group(function () {
    Route::get('/', function () {
        // Uses first & second middleware...
    });

    Route::get('/user/profile', function () {
        // Uses first & second middleware...
    });
});


// 使用路由分组,添加子域名
Route::domain('{account}.example.com')->group(function () {
    Route::get('user/{id}', function ($account, $id) {
        //
    });
});

// 使用路由分组,添加路由前缀
Route::prefix('admin')->group(function () {
    Route::get('/users', function () {
        // Matches The "/admin/users" URL
    });
});

// 使用路由分组,添加命名前缀
Route::name('admin.')->group(function () {
    Route::get('/users', function () {
        // Route assigned name "admin.users"...
    })->name('users');
});

// 路由与模型绑定,路由中user为id参数,回调函数中直接使用id与user匹配的模型实例$user

use App\Models\User;

Route::get('/users/{user}', function (User $user) {
    return $user->email;
});


// 也可以这样使用,使用Controller作为中介

use App\Http\Controllers\UserController;
use App\Models\User;

// Route definition...
Route::get('/users/{user}', [UserController::class, 'show']);

// Controller method definition...
public function show(User $user)
{
    return view('user.profile', ['user' => $user]);
}


// 如果在匹配时匹配的字段不是id,可以这样指定,如使用post的slug字段。
// 那当然也可以直接修改Eloquent模型,让getRouteKeyName函数返回需要的字段。
use App\Models\Post;

Route::get('/posts/{post:slug}', function (Post $post) {
    return $post;
});


// 上面所有路由都不能匹配的请求,可以使用下面的路由(所以在web.php文件中放到最后)
Route::fallback(function () {
    echo "非法访问";
});


// 获取当前请求的Route信息
use Illuminate\Support\Facades\Route;

$route = Route::current(); // Illuminate\Routing\Route
$name = Route::currentRouteName(); // string
$action = Route::currentRouteAction(); // string


// 在项目部署时,可以使用下面的命令缓存路由
php artisan route:cache
// 下面的命令可以清除所有路由缓存
php artisan route:clear

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值