2012-02-16 10 views
2

私はzendフレームワークで作業しています。ビューで私はアクションヘルパーを使用します。アクションコントローラへの直接アクセスを防止する

echo $this->action('info', 'comment', null, array('articleID' => $article->arti_id));

ので、ヘルパーコール 'CommentController' クラスとメソッド 'infoAction'。私のメソッドの中で私は 'articleID'パラメータを取得し、私はモデルでプロセスを開始します。最後に私は共有ビューをレンダリングします。

public function infoAction() { 
    $articleID = $this->getRequest()->getParam('articleID'); 
    // Working with model 
      // ..... 
    $this->renderScript('/View/Script/DefaultComment.phtml'); 
} 

それはうまく動作しますが、私はこのコントローラ/アクションは、URL domain.com/comment/infoから直接アクセスすることを望んでいません。

どうすればこの問題を回避できますか?

Thxを

答えて

3

あなたのアクションメソッドは、常に記事のidパラメータで呼び出された場合、その後、あなたは何のIDが存在しない場合には、要求リダイレクトできます。このURLはhttpによって

public function infoAction() { 
    if ($this->_hasParam('articleID')) { 
     $articleID = $this->getRequest()->getParam('articleID'); 
     // Working with model 
      // ..... 
    $this->renderScript('/View/Script/DefaultComment.phtml'); 
    } else { 
     $this->_helper->redirector('index', 'index', 'default'); 
    } 
} 
+0

はいまだアクセス可能に: //domain.com/comment/info?articleID=1 –

+1

真ですが、あなたのコードソースにURLが表示されているため、このページに直接アクセスするためのセキュリティ上の脅威であってはなりません。しかし、ブローカのページが発生した可能性があります。アクション()が非常に高価で、この種のアクションを実現するためにビューヘルパーがより適切であることを知る必要があります。 – Liyali

+0

最後に、私はヘルパービューを作成し、私はビューをレンダリングします。あなたが言うように、コントローラはパブリック/アクセス可能なままでなければなりません。私のヘルパーはより保護されています。ありがとうございました –

関連する問題