Изменить файл Routes.php в cakephp - PullRequest
1 голос
/ 15 ноября 2011

Я не хочу жестко кодировать значения на этой странице, вместо этого я хочу выбрать значения из базы данных и установить главную страницу.

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

Вместо жестко закодированных значений контроллера и действия, которое я хочузапустите запрос к базе данных postgresql и поместите эти значения в оператор connect.Но я не могу запустить запрос в файле rout.php.

Ответы [ 2 ]

2 голосов
/ 15 ноября 2011

Вы можете определить динамические маршруты в вашем rout.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']));

  }

В этом примере я использую модель Маршрут для созданиямои маршруты.На самом деле, это может быть любая модель на ваш выбор.

1 голос
/ 16 ноября 2011

Альтернативой является подключение к вашей модели маршрутизации обратного вызова afterSave () и создание кэшированной версии маршрутов, что-то вроде (CakePHP2.0):

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;

    }

}

и добавьте следующее в app / Config / rout.php:

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

    require CACHE . 'route_cache.php';

}

Таким образом, файл rout_Cache.php будет обновляться только после сохранения маршрута, и у вас не будет дополнительных затрат на загрузку и чтение таблицы маршрутов при каждом запросе страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...