gpt4 book ai didi

laravel - 如何在同一位置传递不同的动态参数来访问laravel中的不同 View 页面

转载 作者:行者123 更新时间:2023-12-04 16:50:24 28 4
gpt4 key购买 nike

这些是我遇到问题的路线

获取特定城市注册地点列表的路由

例如: http://localhost:8000/London , http://localhost:8000/London/Restaurants

Route::group(['namespace' => 'Page'], function() {
Route::group(['prefix' => '{city}', 'where' => ['city' => '[\w\d]+']], function() {
Route::get('/', 'CityPageController@showCityPage')->name('cityPage');
});
});

获取特定用户个人资料及其详细信息(例如评论、照片等)的路由。

例如: http://localhost:8000/John , http://localhost:8000/John/reviews , http://localhost:8000/John/photos
Route::group(['namespace' => 'User'], function() {
Route::group(['middleware' => 'verified'], function() {
Route::group(['prefix' => '{username}', 'where' => ['username' => '[\w\d]+']], function() {
Route::get('/', 'ProfileController@showProfilePage')->name('profilePage');
Route::get('/reviews', 'ReviewController@showReviewPage')->name('reviewPage');
Route::get('/photos', 'ImageController@showPhotoPage')->name('photoPage');
});
});
});

问题是这两条路线不能同时工作。

位于另一条路线之上的路线优先于另一条路线。

如何解决这个路由问题。

编辑

我知道有一种方法可以实现此功能,但我不知道如何实现。任何帮助表示赞赏。

最佳答案

注意:如果你还没有,首先我建议先在数据库上创建一个唯一的 slug 字段,它会出现在 url 上
你的路由文件

Route::get('{slug1}', 'PageController@singleSlug'); # slug 1 has to be unique i.e. username and cityname
Route::get('{slug1}/{slug2}', 'PageController@doubleSlug'); # combination of slug1 and slug2 has to be unique
Controller 功能
public function singleSlug($slug1)
{
$user = User::where('name', $slug1)->first();
if ($user) {
return view('user')->compact('user');
}

$city = City::where('name', $slug1)->first();

if ($city) {
return view('city')->compact('city');
}

abort(404); # neither user nor city
}



public function doubleSlug($slug1, $slug2)
{
// check the slug2 as this value is always defined by the system
switch ($slug2) {
case 'Restaurants':
$city = City::with('restaurants')->where('name', $slug1)->first();
if ($city) {
$viewName = 'city_restos_listing';
$viewData = $city;
}
break;

case 'reviews':
$user = User::with('reviews')->where('name', $slug1)->first();
if ($user) {
$viewName = 'user_reviews_listing';
$viewData = $user;
}
break;

case 'photos':
$user = User::with('photos')->where('name', $slug1)->first();
if ($user) {
$viewName = 'user_photos_listing';
$viewData = $user;
}
break;

default:
abort(404); # the slug 2 is incorrect
break;
}
if(isset($viewName)) {
return view($viewName)->compact('viewData');
} else {
abort(404); # user or city not found
}
}

关于laravel - 如何在同一位置传递不同的动态参数来访问laravel中的不同 View 页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59480153/

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