2

私のアプリでは、すべてのページ ビューをデータベースに記録します。AppController では次のようになります。

$this->Link->save(array(
    'controller' => $this->request->params['controller'],
    'action' => $this->request->params['action'],
    'var1' => $this->request->params['pass'][0],
    'var2' => $this->request->params['pass'][1]
));

これは問題なく動作しますが、人々 (またはボット) が入力する URL の一部は 404 です。これらのリンクが本物かどうかを確認するにはどうすればよいですか。

私が受け取るリクエストの多くは、同じドメインの以前の Web サイトからのもので、Cake がコントローラであると考える /images などへのリクエストです。

データベースに入る前にチェックが行われるか、ビューでデータベースから取得された後にチェックが行われるかは気にしません。

ありがとう!

4

3 に答える 3

1

これを自分で試したことはありませんが、電話してみることができますRouter::parse()

完全な URL を提供すると、戻り値はコントローラー、アクションなどの値を確認できる Cake のルート配列になります。

于 2012-06-04T14:22:03.640 に答える
0

更新 2: ディスパッチ前にリクエストをキャッチする

悲しいことに、次のコードは Cakephp 2.2 用です (アップグレードする場合)。Dispatch Filters のマニュアルページを参照してください

<?php
App::uses('DispatcherFilter', 'Routing');
class HttpCacheFilter extends DispatcherFilter {

    public function beforeDispatch($event) {
        $request = $event->data['request'];

        if ($request->params['controller'] !== 'pages') {
            die('not found');
        }
    }
}

元の答え:

そもそも Cakephp がチェックしてくれるので、何もチェックする必要はありません。

本番モード (つまり debug=0) では、CakePHP はNotFoundException()未定義のコントローラーやアクションに対して をスローします。

開発モードでは、CakePHP は親切にも、より明確なメッセージを表示します。

で実験しConfigure::write('debug',0);てくださいcore.php

お役に立てれば !

于 2012-06-04T14:30:30.703 に答える