Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 在cakephp中修改Routes.php文件_Postgresql_Cakephp - Fatal编程技术网

Postgresql 在cakephp中修改Routes.php文件

Postgresql 在cakephp中修改Routes.php文件,postgresql,cakephp,Postgresql,Cakephp,我不想在此页面中硬编码值,而是希望从数据库中提取值并设置主页面 Router::connect('/', array('controller' => 'tools', 'action' => 'index' )); 我不想硬编码控制器和操作的值,而是想对postgresql数据库进行查询,并将这些值放入connect语句中。但是我无法在routes.php文件中启动查询。您可以在routes.php中定义动态路由,如下所示: /** * Initialize model

我不想在此页面中硬编码值,而是希望从数据库中提取值并设置主页面

Router::connect('/', array('controller' => 'tools', 'action' => 'index' ));

我不想硬编码控制器和操作的值,而是想对postgresql数据库进行查询,并将这些值放入connect语句中。但是我无法在routes.php文件中启动查询。

您可以在routes.php中定义动态路由,如下所示:

  /**
   * Initialize model and perform find
   */
  $Route = ClassRegistry::init('Route'); 
  $routes = $Route->find('all'); 

  /**
   * Iterate over results and define routes
   */
  foreach ($routes as $route) {

    Router::connect('/', array('controller' => $route['Route']['controller'], 'action' => $route['Route']['action']));

  }

在本例中,我使用路由模型创建路由。实际上,这可以是您选择的任何模型。

另一种方法是插入路由模型afterSave()回调并生成路由的缓存版本,如(CakePHP2.0):


这样,routes_cache.php文件只会在保存路由时更新,并且您不会在每个页面请求上加载和读取路由表的额外开销。

顺便说一句,我的答案中的示例会将我的所有动态路由发送到根URL。这纯粹是为了向您展示如何使用查找结果。您将路由模型放在了哪个文件夹中?所有模型都应该放在app/models/文件夹中。谢谢,您的代码实际上解释了如何更好地使用Cake的文件功能,而不是它们的文档。
class Route extends AppModel {

    public function rebuildRouteCache() {

        $routes = $this->find('all')

        $routeCache = new File(CACHE . 'route_cache.php', true);

        $routeCache->write('<?php' . "\n");

        foreach($routes as $route) {

            $parsed = Router::parse($route['Route']['url']);

            $routeCache->write("Router::connect('" . $route['Route']['route'] . "', array('controller'=>'" . $parsed['controller'] . "', 'action'=>'" . $parsed['action'] . "', '" . $parsed['pass'][0] . "', 'plugin'=>'" . $parsed['plugin'] . "'));\n");
        }

        $routeCache->close();

        return true;

    }


    public function afterSave($created) {

        $this->rebuildRouteCache();
        return true;

    }

}
if (file_exists(CACHE . "route_cache.php")) {

    require CACHE . 'route_cache.php';

}