0

ここに私が直面している問題があります: Yii でブログ システムを作成し、投稿ビュー ページにコメント作成フォームを作成しました。削除リンクも作成しました。リンクは正常に機能しており、削除リンクをクリックするとコメントは実際に削除されますが、コメントが削除されると、コメント ページの管理者 Gridview にリダイレクトされます。

これは Comment Controller のデフォルトの削除アクションです:

public function actionDelete($id)
    {
        $this->loadModel($id)->delete();

        // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser

        if(!isset($_GET['ajax']))
            $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
    }

ただし、returnUrlも試してみましたが、同じ投稿ビュー ページにリダイレクトできません。コメント管理の管理ページに常にリダイレクトされます。

これは、ビュー ファイルにある CHtml::link です。

<?php echo CHtml::link('Delete','#',array('submit'=>array('comment/delete','id'=>$comment->id),'confirm'=>'Are you sure?')); ?>

これで必要なコメントは削除されますが、削除後にこのページ自体にリダイレクトされるようにしたいです。

さらにコードが必要な場合は、それを提供します。

PS:これが役立つ場合、CommentControllerのaccessRulesは次のとおりです。

public function accessRules()
    {
        return array(
            array('allow',  // allow all users to perform 'index' and 'view' actions
                'actions'=>array('index','view','create'),
                'users'=>array('*'),
            ),

            array('allow', // allow admin user to perform 'admin' and 'delete' actions
                'actions'=>array('admin','delete','update'),
                'users'=>array('@'),
            ),
            array('deny',  // deny all users
                'users'=>array('*'),
            ),
        );
    }

私が何か非常に間違ったことをしているなら、申し訳ありません。私は実際に Yii を初めて使用し、できる限り Yii を学ぶために最善を尽くしています。

よろしく、

4

2 に答える 2

3
echo CHtml::link('Delete','#',array('submit'=>array('comment/delete','id'=>$comment->id),'confirm'=>'Are you sure?')); ?

この行は、クリックすると投稿モードで「コメント/削除」アクションに送信される HTML リンクを作成することを意味します。

これらのオプションに関するドキュメントは、Yii サイトで入手できます: http://www.yiiframework.com/doc/api/1.1/CHtml#clientChange-detail

明らかに、ここでは $_POST に「returnUrl」引数が設定されておらず、「id」のみが設定されています。そのため、常に管理ビューにリダイレクトされます。

それ以外の場合にurlReturnをどのように正確に使用するかはわかりませんが、リダイレクトの場合、アイデアは次のようになると思います。

    public function actionDelete($id) {
    $this->loadModel($id)->delete();

    // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
    if (!isset($_GET['ajax'])) {
        $this->redirect(Yii::app()->getRequest()->urlReferrer);
    }
}
于 2013-05-16T20:56:06.003 に答える
0

HTTPリファラーを使用するだけです

public function actionDelete($id)
{
    $this->loadModel($id)->delete();

    // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser

    if(!isset($_GET['ajax']))
        $this->redirect(isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : array('admin'));
}

または、読み込んでいるモデルから投稿の URL を取得し、そこにリダイレクトします。正確な実装の詳細はわかりませんが、次のようになります (ルートがblogPost/viewあり、モデルがコメントの対象となるブログ投稿commentと関係があると仮定します。blogPost

public function actionDelete($id)
{
    $model = $this->loadModel($id);
    $model->delete();

    // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser

    if(!isset($_GET['ajax']))
        $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('blog/view', 'id' => $model->blogPost->id));
}
于 2013-05-16T20:47:57.860 に答える