3

/app/Config/routes.php構成ファイルのデータベースから値をロードしようとしています。

私が使用している上部:App::uses('Option', 'Model');

そして、私は私のクラスで私の発見を呼んでいます:$this->Option->find('all');

私は何かが足りないのですか?

4

3 に答える 3

5

ルートにデータベースクエリを入れません。それは彼らのための場所ではありません(関心の分離など)。また、すべてのリクエストの速度が低下するため、ルートがそれほど頻繁に変更されることはありません。

私が行ったことは、データベースルートが作成/更新されるたびに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;

}
于 2012-09-07T10:22:44.330 に答える
3

モデルを使用する前に、モデルをインスタンス化する必要があると思います。

App::uses('Option', 'Model');
$option = new Option();
$something = $option->find('all');
于 2012-09-07T02:51:04.497 に答える
0
  /*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']));
  }
于 2014-11-17T06:51:01.383 に答える