1

サイトの静的ページに動的ルーティングを使用したいと考えています。

Routesファイルで次のコードを使用しました

$arr = ClassRegistry::init('Page');

$this->loadModel('Page');
$arr = $this->Page->find('all');
foreach($arr as $value)
{
   //my code
}

しかし、それは機能せず、次のようなエラーが表示されます。

ClassRegistry が定義されていません

4

1 に答える 1

2

そんなことしないで

コントローラーのコードをルート ファイルに入れようとして、サイトを不必要にデータベースに依存させようとしている。もちろん、サイト全体がデータベースに依存している可能性がありますが、ルートを db 依存にすることで、cakephp に到達するすべてのリクエスト (つまり、webroot の静的ファイルではないすべてのリクエスト) は db と通信する必要があります。少なくとも物事が遅くなり、データベースに問題が発生した場合、サイトはすべてのリクエストに対して致命的なエラーの素晴らしいページになります. これは、routes ファイルがリクエスト処理プロセスの非常に早い段階で読み込まれるためです。routes ファイルには、実際のロジックは含まれていませんRouter::connect。ステートメントだけです。

代替手段: キャッチオール ルートを使用する

静的ページに使用できるパターンがある場合は、それを使用して、ルート定義が 1 つだけになるようにします。すなわち:

Router::connect('/x/*', array('controller' => 'some', 'action' => 'thing')); //eerily similar to the default static pages route

代替手段: 静的ルート ファイルを作成する

ルートのルールが変更されるたびにルート ロジックを構築し、それらを静的ファイルに書き込みます。したがって、routes.php ファイルは次のようになります。

<?php
... routes that don't change ...
require 'path/to/dynamic_routes_file.php';

関連するモデルの afterSave ハンドラーを使用して、この動的ルート ファイルの再構築をトリガーできます。

その他の選択肢

この種のものを処理するには、他にも多くの方法があります。たとえば、エラー処理プロセスをオーバーライドして、処理するこれらの db 依存ルートの 1 つがあるかどうかを最初に確認します。または、文字通り必要なものを実装するカスタム ルート クラスを作成するだけです。

ただし、実行時のロジックをできるだけシンプル/キャッシュ/静的にすることを目指してください。すべてのリクエストが常にデータベースと通信する必要があるシステムを構築しないでください。

于 2013-01-01T17:44:14.177 に答える