有没有可能在laravel 5里给用户一个漂亮的url,给app一个实用的url?

Is it possible in laravel 5 to show a pretty url to the user, and a practical url to the app?

我有这个url:mywebsite.com/user/1/edit

我希望我的用户看到这个:mywebsite.com/edit-your-profile/

使用 Route::resource('user', 'UserController'); 时可以吗?如果是,我该怎么做 :) ?我仍然希望我的应用能够看到 user/1/edit,因为我在我的中间件中使用它来防止未经授权的访问:

if ( \Auth::user()->id != $request->segment(2) ) {

    return  redirect()->back();

}

所以,一个漂亮的 url 适合我的用户,一个实用的适合我的应用程序。

根据您的解释,我认为用户只能编辑自己的个人资料。所以 mywebsite.com/user/1/edit 甚至不应该被允许。 相反,将其添加到您的 Route.php 添加:Route::get('/edit-your-profile','UserController@edit'); 并将 \Auth::user()->id 硬编码到您的 editController 中,甚至不允许用户设置 ID。如果您已经知道 ID 必须是什么并且所有其他 ID 都将被拒绝,为什么还要费心向他们询问 ID!

PS。用于更新的 html 表单应位于 @update,该表单的输出应发送至 @edit。我只是想简化示例中的路由。

附加问题:

鼻涕虫是动态创建的,这意味着您对它们没有先验知识。因此,您不能将它们静态硬编码到您的路由中。即使可以,它们也可能太多了。所以,我认为唯一的办法就是使用通配符来捕获导航的URI,然后动态创建页面。

首先确定 slug 的基本 URI 是什么:例如,对于用户名:<>b4dus3r name<>(baduser name),您已经生成了 bdusr-name slug。你知道这个 slug 是一个用户名 slug 并且你已经决定使用基本 URI 作为 example.com/user/。因此,要导航到您想要的此用户的个人资料:example.com/user/bdusr-name

将此添加到您的路线文件中:Route::get('/user/{username},'UserController@show');

在你的UserController中:

public function show($userSlug){
    $user = \App\User::where('userslug','=',$userSlug)->get();
    return view('user.show')->with('user',$user);
}

这里我假设用户 slug 存储在字符串中,而不是外键,在 users table 的 userslug 列中。换句话说,您可以用 slug 替换 ID 或您拥有的东西。