【问题标题】:"Beautifying" a URL in Yii在 Yii 中“美化”一个 URL
【发布时间】:2012-05-15 03:18:35
【问题描述】:

我想转换格式为

的网址

path/to/my/app/Controller_action/id/2

path/to/my/app/Controller_action/id/User_corresponding_to_id_2

我已经看过来自 Yii 的 this 教程,但它对我没有任何帮助。谁能帮我解决这个问题?

编辑:我还想知道这件事在 POST 场景中是否可能,即我只会在 URL 中包含 path/to/my/app/Controller_action。

【问题讨论】:

  • 有什么理由需要使用 Yii 进行重写吗?使用 .htaccess 重写规则会简单得多。 roshanbh.com.np/2008/03/url-rewriting-examples-htaccess.html
  • 事情是它全是动态的。如果我必须将 path/user="someName" 转换为 path/someName,我会很乐意将其写入 .htaccess 文件中。
  • 关于您的编辑:真的不要那样做。仅当数据库中的数据要更改时才接受使用 POST。它还会一直向访问者显示“您确定要再次发布表单吗”弹出窗口。

标签: url-rewriting yii


【解决方案1】:

在你的用户模型中添加一个 getUrl 方法

public function getUrl()
{
    return Yii::app()->createUrl('controller/action', array(
    'id'=>$this->id,
    'username'=>$this->username,
    ));
}

config/main.php中添加如下规则urlManager组件

'controller/action/<username:.*?>/<id: \d+>'=>'controller/action'

并在任何地方使用模型url虚拟属性

【讨论】:

  • 嘿,这东西有效,但我需要进一步澄清。一件事是,现在我需要将用户名作为参数添加到我的操作函数中!!另外,你能告诉我当我 POST 一个页面却没有得到它时如何创建类似的东西。
  • 我没有明白你发布页面的意思。请澄清,如果可能的话,用一个例子来解释
  • 我的意思是表单操作 - GET 和 POST。我认为这种 URL 重写仅适用于 GET(即在 url 中传递参数)。我错了吗?
【解决方案2】:

dInGd0nG 是在正确的轨道上,但如果我理解正确,您也希望根据实际用户名而不是 ID 执行操作,对吗?

在 Yii 中这并不难。为简单起见,我在这里假设控制器是用户,操作是视​​图。

您的用户控制器:

public function actionView($id)
{
    if (is_numeric($id))
       $oUser = User::model()->findByPk($id);
    else
       // Luckily Yii does parameter binding, wouldn't be such a good idea otherwise :)
       $oUser = User::model()->findByAttributes(array('username' => $id));

    ...
}

你的 urlManager 配置:

'user/view/<id: \w+>' => 'user/view',

或更笼统地说:

'user/<action: \w+>/<id: \w+> => 'user/<action>',

在视图中生成用户 url:

 $this->createUrl('user/view', array('id' => $oUser->username));

【讨论】:

    猜你喜欢
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    相关资源
    最近更新 更多