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