0

我正在使用 Yii 框架开发一个类似于 facebook 的社交网站。作为登录用户可以看到他们在搜索或通过其他方式获得的任何用户的个人资料。在 facebook 中发生的事情就像

facebook.com/marthajoseph/photos

在这里,用户正在查看“marthajoseph”的个人资料。我想在 yii 中实现同样的目标。目前我做了这样的事情

myapplication.com/index.php?r=u/default/index?uid=110

这里的“u”是用户的模型。在这里,我正在查看用户 ID 为“110”的用户的个人资料。问题是每次我切换用户的照片、个人资料、帖子等时,我都必须在这个 uid 查询字符串中附加导致不稳定的 url。

我怎样才能实现类似facebook的东西?

4

1 回答 1

1

我建议使用上面 ernie 提到的Yii URL Management完全重写 URL

首先,使用 URL 的路径格式。这是通过首先取消注释protected/config/main.phpurlManager中的行来完成的(默认情况下在第 34 行左右)。例如,它的作用是让您使用“漂亮的 URL”,而不是看起来像这样的 URL:

www.example.com/index.php?r=user/profile?uid=110

你可以有这样的东西:

www.example.com/user/110

因此,例如,如果我们想将任何具有结构的 URL 路由profile/<a users id>到我们的用户控制器视图操作 (actionView),我们可以执行以下操作:

'urlManager'=>array(
    'urlFormat' => 'path',
    'showScriptName' => false,
    'rules' => array(
        'user/profile/<id:.+>' => 'user/view',
        ...

所以在数组的左边我们有“URL 的样子”,在右边我们有“它指向的地方”。然后,您可以使用 访问id视图或控制器中的值$_GET,例如:

echo "You are viewing user id ".$_GET['id'];

您可以使用此值来查询照片或个人资料内容或与该用户关联的任何内容。就在 URL 中包含用户名(facebook 是如何做到的,例如:)而言facebook.com/myusername,您很可能会让用户在某处输入他们的虚 URL并将其存储在数据库中。然后,您可以将规则更改为:

'user/profile/<user_vanity_url:.+>' => 'user/view',

然后使用 . 访问与上面相同的值$_GET。如果你走这条路,一条建议是记住你应该阻止用户查看他们不允许查看的内容,例如查看不是他们朋友的人的照片。我会假设您有某种存储这些关系的表?

关于必须附加 id 或您通过 URL 传递的任何值,您可以简单地将其附加到视图中或创建 HTML 的任何位置,例如,如果您想显示来自用户照片的链接个人资料页面,您可以执行以下操作:

<a href="<?php echo Yii::app()->request->baseUrl; ?>/photos/<?php echo $_GET['id']; ?>"></a>

关于 urlManager 中的 URL 规则的另一件事,规则是从上到下解释的,并且将使用第一个匹配的规则。

希望这可以帮助您走上正确的道路。如果您仍然卡住,请查看以下帖子:

于 2013-02-11T23:54:24.213 回答