/app/Config/routes.php構成ファイルのデータベースから値をロードしようとしています。
私が使用している上部:App::uses('Option', 'Model');
そして、私は私のクラスで私の発見を呼んでいます:$this->Option->find('all');
私は何かが足りないのですか?
/app/Config/routes.php構成ファイルのデータベースから値をロードしようとしています。
私が使用している上部:App::uses('Option', 'Model');
そして、私は私のクラスで私の発見を呼んでいます:$this->Option->find('all');
私は何かが足りないのですか?
ルートにデータベースクエリを入れません。それは彼らのための場所ではありません(関心の分離など)。また、すべてのリクエストの速度が低下するため、ルートがそれほど頻繁に変更されることはありません。
私が行ったことは、データベースルートが作成/更新されるたびにapp / tmp / cacheにルートファイルを作成することです(コードは異なりますが、これが私のやり方です)。
ルートモデル:
function rebuildCache() {
$data = $this->find('all');
$buffer = "<?php\n";
$filename = TMP . 'cache' . DS . 'routes.php';
foreach($data as $item) {
$url = Router::parse('/' . $item['Route']['destination']);
if (count($url['pass']) > 0) {
$id = $url['pass'][count($url['pass']) - 1];
}
else {
$id = null;
}
$buffer .= "Router::connect('/{$item['Route']['url']}', array('controller'=>'{$url['controller']}', 'action'=>'{$url['action']}', {$id}));\n";
}
file_put_contents($filename, $buffer);
}
ルートモデルafterSave()からrebuildCache()を呼び出します。
function afterSave() {
$this->rebuildCache();
}
Routes.phpにファイルを含めるだけです。
$routes_cache_filename = TMP . 'cache' . DS . 'routes.php';
if (file_exists($routes_cache_filename)) {
require_once $routes_cache_filename;
}
モデルを使用する前に、モデルをインスタンス化する必要があると思います。
App::uses('Option', 'Model');
$option = new Option();
$something = $option->find('all');
/*Load ClassRegistry*/
App::uses('ClassRegistry', 'Utility');
/**
* Initialize model and perform find
*/
$Cms = ClassRegistry::init('Cms');
$cmsdata = $Cms->find('all');
/**
* Iterate over results and define routes
*/
foreach ($cmsdata as $cmsrow) {
Router::connect('/', array('controller' => $cmsrow['Cms']['controller'], 'action' => $cmsrow['Cms']['slug']));
}