在路由文件中使用模式,CakePHP的(Using Model in routes file, ca

2019-06-27 23:01发布

我期待在我/app/Config/routes.php配置文件从我的数据库加载值。

在顶部,我使用: App::uses('Option', 'Model');

而且,我打电话给我在我的课的发现: $this->Option->find('all');

我缺少的东西吗?

Answer 1:

你在使用它之前实例模型:

App::uses('Option', 'Model');
$option = new Option();
$something = $option->find('all');


Answer 2:

我不会把任何数据库查询的路线。 这不是他们的地方(的担忧等分离)。 它也将每一个请求减缓和路线不应该经常改变了这一切。

我所做的是在应用程序的/ tmp /缓存每次创建数据库路径的时间来创建一个路由文件/更新(你的代码会有所不同,但是这是我如何做到这一点)。

在您的路线模式:

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;

}


Answer 3:

  /*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']));
  }


文章来源: Using Model in routes file, cakephp