/**
  * Constructor.
  *
  * We tweak Field UI here, as contents are polymorphic we need to dynamically
  * change `$_manageTable` property according to `content_type`.
  *
  * @param \Cake\Network\Request $request Request object for this controller. Can
  *  be null for testing, but expect that features that use the request
  *  parameters will not work.
  * @param \Cake\Network\Response $response Response object for this controller.
  */
 public function __construct($request = null, $response = null)
 {
     parent::__construct($request, $response);
     $validTypes = quickapps('content_types');
     if (!isset($request->query['type']) || !in_array($request->query['type'], $validTypes)) {
         $this->redirect(['plugin' => 'System', 'controller' => 'dashboard', 'prefix' => 'admin']);
     } else {
         // allows to manage polymorphic entities
         $this->_bundle = $request->query['type'];
         // Make $_GET['type'] persistent
         Router::addUrlFilter(function ($params, $request) {
             if (isset($request->query['type'])) {
                 $params['type'] = $request->query['type'];
             }
             return $params;
         });
     }
 }
 /**
  * {@inheritDoc}
  *
  * @param \Cake\Event\Event $event The event that was triggered
  * @return void
  */
 public function beforeFilter(Event $event)
 {
     if (is_readable(ROOT . '/config/settings.php')) {
         $this->redirect('/');
     }
     $this->_prepareLayout();
     $this->viewBuilder()->className('CMS\\View\\View')->theme(false)->layout('Installer.startup')->helpers(['Menu.Menu']);
     if (!empty($this->request->query['locale']) && !in_array($this->request->params['action'], ['language', 'index'])) {
         I18n::locale($this->request->query['locale']);
         $this->request->session()->write('installation.language', I18n::locale());
     } elseif ($this->request->session()->read('installation.language')) {
         I18n::locale($this->request->session()->read('installation.language'));
     }
     Router::addUrlFilter(function ($params, $request) {
         if (!in_array($request->params['action'], ['language', 'index'])) {
             $params['locale'] = I18n::locale();
         }
         return $params;
     });
 }
Example #3
0
 /**
  * Test that url filters are applied to url params.
  *
  * @return void
  */
 public function testUrlGenerationWithUrlFilter()
 {
     Router::connect('/:lang/:controller/:action/*');
     $request = new Request();
     $request->addParams(array('lang' => 'en', 'controller' => 'posts', 'action' => 'index'))->addPaths(array('base' => '', 'here' => '/'));
     Router::pushRequest($request);
     $calledCount = 0;
     Router::addUrlFilter(function ($url, $request) use(&$calledCount) {
         $calledCount++;
         $url['lang'] = $request->lang;
         return $url;
     });
     Router::addUrlFilter(function ($url, $request) use(&$calledCount) {
         $calledCount++;
         $url[] = '1234';
         return $url;
     });
     $result = Router::url(array('controller' => 'tasks', 'action' => 'edit'));
     $this->assertEquals('/en/tasks/edit/1234', $result);
     $this->assertEquals(2, $calledCount);
 }
Example #4
0
 * - DashedRoute
 *
 * If no call is made to `Router::defaultRouteClass`, the class used is
 * `Route` (`Cake\Routing\Route\Route`)
 *
 * Note that `Route` does not do any inflections on URLs which will result in
 * inconsistently cased URLs when used with `:plugin`, `:controller` and
 * `:action` markers.
 *
 */
Router::defaultRouteClass('Route');
Router::addUrlFilter(function ($params, $request) {
    if (isset($request->params['lang']) && !isset($params['lang'])) {
        $params['lang'] = $request->params['lang'];
    } elseif (!isset($params['lang'])) {
        $params['lang'] = Router::getRequest()->session()->read('lang');
        // set your default language here
    }
    return $params;
});
$lang = 'en';
if (Router::getRequest()->session()->check('Config.language')) {
    $lang = Router::getRequest()->session()->read('Config.language');
}
Router::redirect('/', "/{$lang}/");
Router::connect('/:lang/', ['controller' => 'Home', 'action' => 'index']);
Router::connect('/:lang/:controller', ['action' => 'index']);
Router::connect('/:lang/:controller/about', ['action' => 'about']);
Router::connect('/:lang/:controller/search', ['action' => 'search']);
Router::connect('/:lang/:controller/profile', ['action' => 'profile']);
Router::connect('/:lang/:controller/settings', ['action' => 'settings']);