有没有可能在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 或您拥有的东西。
我有这个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 或您拥有的东西。