是否可以在 laravel 5 中向用户显示漂亮的 url,以及向应用程序显示实用的 url?
Posted
技术标签:
【中文标题】是否可以在 laravel 5 中向用户显示漂亮的 url,以及向应用程序显示实用的 url?【英文标题】:Is it possible in laravel 5 to show a pretty url to the user, and a practical url to the app? 【发布时间】:2015-08-24 07:12:32 【问题描述】:我有这个网址: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();
所以,给我的用户一个漂亮的网址,给我的应用一个实用的网址。
【问题讨论】:
【参考方案1】:根据您的解释,我认为用户只能编辑自己的个人资料。所以mywebsite.com/user/1/edit
甚至不应该被允许。
相反,将其添加到您的 Route.php 中添加:Route::get('/edit-your-profile','UserController@edit');
并将 \Auth::user()->id
硬编码到您的 editController
中,甚至不允许用户设置 ID。如果您已经知道 id 必须是什么并且所有其他 id 都将被拒绝,为什么还要向他们询问 ID!
附言。用于更新的 html 表单应位于@update
,并且该表单的输出应发送至@edit
。我只是想简化示例中的路由。
【讨论】:
多么明显的解决方案!早该想到的。顺便说一句,你能回答奖金问题吗?我也会给你的答案一个upwote ;) - 对其他人来说,作为一个结果,我已经放弃使用 Route::resource 我想要更多地控制 url。【参考方案2】:补充问题:
蛞蝓是动态创建的,这意味着您没有关于它们的先验知识。因此,您不能将这些静态硬编码到您的路线中。即使可以,也可能太多了。所以,我认为唯一的方法是使用通配符来捕获导航的 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
表的 userslug
列中的字符串中,而不是外键中。换句话说,您将 ID 或您拥有的东西替换为 slug。
【讨论】:
你是人民的朋友。非常感谢您花时间写这篇文章。它为我节省了大量时间 :) 我希望你有一个美好的一天! 它回答了你的问题吗? 我又问了蛞蝓问题here。如果您在此处删除答案并在此处重新发布,我将接受您的答案并投票。我不能在同一个帖子中给你两个正确的答案。 没关系。谢谢你。我只是想知道您是否认为我的回答是正确的,以供我以后参考。再次感谢。以上是关于是否可以在 laravel 5 中向用户显示漂亮的 url,以及向应用程序显示实用的 url?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Laravel 5.6 中向资源控制器添加自定义方法
如何在 Magnolia CMS 中向登录用户显示页面的某些内容部分