0

したがって、urlManager を使用して、この時点に到達できました。

'people/<id:\d+>/<last:.*?>/<name:.*?>'=>'person/view',

これを生成します: http://foo.com/people/3/smith/john

ID番号、この場合は「3」をなくしたい

私はこれを使ってみました:

'people/<last:.*?>/<name:.*?>'=>'person/view', //makes sense right?

ただし、 http://foo.com/people/smith/johnに移動しようとすると、サーバー 400 エラーが発生します。何を与える?代わりに .htaccess ファイルを変更してみる必要がありますか?

ここで要求されているのは、私の urlManager コンポーネント全体です。

    'urlManager'=>array(
        'urlFormat'=>'path',
        'showScriptName'=>false,
        'rules'=>array(
            'about' => array('site/page', 'defaultParams' => array('view' => 'about')),
            'contact'=>'site/contact',
            'login' =>'site/login',
            '/'=>'site/index',
            'people/<last:.*?>/<name:.*?>'=>'person/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
            '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
        ),
    ),

ここに私の PersonController.php ファイルがあります:

public function actionView()
{
    $person=$this->loadModel();
    $this->render('view',array(
        'model'=>$person,
    ));
}

private $_model;

public function loadModel()
{
    if($this->_model===null)
    {
        if(isset($_GET['last']))
        {
            $this->_model=Person::model()->findByPk($_GET['id']);
        }
        if($this->_model===null)
            throw new CHttpException(404,'The requested page does not exist.');
    }
    return $this->_model;
}
4

3 に答える 3

0

の を見てactionViewくださいPersonController

public function actionView($id,...)
{

}

そのため、view アクションが機能するには$idパラメーターが必要です。そうしないと、400 Bad Request エラーがスローされます。変更された URL ルールでは、指定されたパラメーターは$lastとのみ$nameです。解決策は、パラメーターが内で使用されていない場合は、$idパラメーターを削除することです。それ以外の場合は、必要な人を決定するための関数ロジックを変更する必要があります。actionView()actionView$last$name$id

于 2012-09-16T13:40:19.293 に答える
0

リクエストが引き続き index.php にルーティングされるように、おそらく URL の書き換え条件が必要です。

このガイドをチェックしてください: http://www.yiiframework.com/doc/guide/1.1/en/topics.url#user-friendly-urls

于 2012-09-16T03:58:43.333 に答える