我正在使用Yii框架开发类似社交网站的Facebook。登录用户可以查看他们在搜索时或通过其他方式获得的任何用户的个人资料。在facebook中它就像
facebook.com/marthajoseph/photos
用户正在查看“marthajoseph”的个人资料。我希望在yii中实现同样的目标。 目前我做了类似的事情
myapplication.com/index.php?r=u/default/index?uid=110
这里“u”是用户的模型。 在这里,我正在查看用户ID为“110”的用户的个人资料。问题是每次我切换用户的照片,个人资料,帖子等时,我必须将此uid查询字符串附加到导致不稳定的网址。
我怎样才能实现facebook这样的事情?
答案 0 :(得分:1)
我建议使用上面提到的<{p>>中提到的Yii URL Management完全重写网址
首先,使用URL的路径格式。首先取消注释 protected / config / main.php 中的urlManager
行(默认情况下为第34行)。这样做是让你使用“漂亮的URL”,而不是看起来像这样的URL:
www.example.com/index.php?r=user/profile?uid=110
你可以这样:
www.example.com/user/110
因此,例如,如果我们想将任何具有结构profile/<a users id>
的URL路由到用户控制器视图操作(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
),您很可能让用户在该行的某处输入他们的vanity URL并将其存储在数据库中。然后,您可以将规则更改为:
'user/profile/<user_vanity_url:.+>' => 'user/view',
然后使用$_GET
访问与上述相同的值。如果你选择这条路线,建议你记住,你应该阻止用户查看不允许查看的内容,例如查看不是他们朋友的人的照片。我会假设你有一些存储这些关系的表格?
关于必须附加您通过URL传递的id或任何值,您只需将其附加到视图中或创建HTML的任何位置,例如,如果要显示指向用户的链接他们的个人资料页面中的照片可以用来做:
<a href="<?php echo Yii::app()->request->baseUrl; ?>/photos/<?php echo $_GET['id']; ?>"></a>
关于urlManager中URL规则的另一个问题是,规则从上到下进行解释,并且将使用第一个匹配的规则。
希望这可以帮助您走上正确的道路。如果您仍然卡住,请查看以下帖子: