是否可以在 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.4 中向多个抄送收件人发送电子邮件

在 Laravel 5.1 分页中使用漂亮的 URL

如何在 Laravel 5.6 中向资源控制器添加自定义方法

如何在 Magnolia CMS 中向登录用户显示页面的某些内容部分

在 Laravel 中向 API 资源链接添加参数 [重复]

在 URL 中向用户显示 Key 值是不是存在任何安全问题?