gpt4 book ai didi

php - 检查模型是否存在,如果在 Laravel 中没有找到则继续路由

转载 作者:行者123 更新时间:2023-12-05 08:40:44 26 4
gpt4 key购买 nike

我有两个模型,我不想在其 URL 前添加前缀。例如。用户和帖子

如果我有一个 URL https://example.com/title-of-the-posthttps://example.com/username

我将在 web.php 路由文件中做这样的事情:

// User
Route::get('{slug}', function ($slug) {
$user = User::whereSlug($slug)->get();
return view('users.show', $user);
});

// Post
Route::get('{slug}', function ($slug) {
$post = Post::whereSlug($slug)->get();
return view('posts.show', $user);
});

现在我面临的问题是,第一条路线已输入,即使没有匹配 slug 的模型也永远不会到达第二条路线。

如果找不到$user,我如何退出到下一条路线(Post)?

注意:我尝试过许多不同的退出策略,但似乎都不起作用。

return;
return false;
return null;
// and return nothing

提前致谢!

更新:

另一个问题是,如果我有其他 resource 路由,它们也会被第一个路由阻塞。

例如如果我有 Route::resource('cars', 'CarController') 它会生成一个 /cars 路径匹配 {slug} 并且也被第一个用户阻止路线。

最佳答案

我想你已经明白了,但我在我的应用程序中有类似的设置,在我的特殊情况下,我还需要能够捕获多段路由。

这就是我的做法。例如,我的 web.php 中的最后一条路线如下。

Route::get('{catchall}', 'SlugRoutesController@route')->where('catchall', '.*');

where class ->where('catchall', '.*'); 确保我们也能够捕获具有多个段的 slug。

例如下面的路由都会被匹配到:

/blog/this-is-an-article
/user/mozammil/articles

然后,在我的 SlugRoutesController 中,我可以注入(inject)我的其他 Controller 依赖项。

<?php

namespace App\Http\Controllers;

use App\Post;
use App\User;
use PostController;
use UserController;
use Illuminate\Http\Request;

class HomeController extends Controller
{
private $postController;
private $userController;

/**
* Create a new controller instance.
*
* @return void
*/
public function __construct(UserController $userController, PostController $postController)
{
$this->userController = $userController;
$this->postController = $postController;
}

public function route(Request $request, string $slug)
{
$post = Post::where('slug', $slug)->first();
if(post) {
return $this->postController->index($request);
}

$user = User::where('slug', $slug)->first();
if($user) {
return $this->userController->index($request);
}

abort(404);
}
}

我的实际 Controller 比那复杂一点,但你明白了。

关于php - 检查模型是否存在,如果在 Laravel 中没有找到则继续路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54151961/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com