I want something like this:
Router::connect('/robots.txt', array('controller' => 'pages', 'action' => 'robotstxt'));
But when I try: http://example.com/robots.txt it's show me 404.
Also I tried do this:
Router::connect('/robots', array('controller' => 'pages', 'action' => 'robotstxt', 'ext' => 'txt'));
+
Router::parseExtensions('txt');
Leave the ext part - like as-
Router::connect('/robots', array('controller' => 'pages', 'action' => 'robotstxt'));
Router::parseExtensions('txt');
Related
CakePHP Version 2.5.2
Config.Language 'spa'
If i'm in
mydomain.com/backoffice
and i reload (ctrl-r) i get again
mydomain.com/backoffice
If i call in UsersController in action deleteCache at the end:
return $this->redirect('/backoffice');
i get
mydomain.com/users/sbackoffice
Please note the "s" before backoffice. That seems to be a part of the config.language
If i set the Config.language to 'eng' i get
mydomain.com/users/ebackoffice
Please note now the 'e' before backoffice.
My routes.php:
Router::connect('/backoffice', array('controller' => 'users', 'action' => 'backoffice'));
Router::connect('/:language/:controller/:action/*',
array(),
array('language' => 'eng|spa')
);
Router::connect('/:language/:controller',
array('action' => 'index'),
array('language' => 'eng|spa')
);
Router::connect('/:language', array('controller' => 'technologies', 'action' => 'home'),
array('language' => 'eng|spa')
);
Any idea?
How can i debug this?
I got this code working.
when i go to domain.com/ it will route to home->index(). when i type in domain.com/username.. it will route to users->view(username)
file: config/routes.php
$controllerList = App::objects('Controller');
foreach($controllerList as $controller)
{
$controllerName = str_replace('Controller', '', $controller);
if($controllerName != "App" & $controllerName != "Pages")
{
Router::connect('/' . $controllerName . '/:action/*', array('controller' => $controllerName));
$firstLetterLower = strtolower(substr($controllerName,0,1));
$lowerCaseName = $firstLetterLower . substr($controllerName,1);
Router::connect('/' . $lowerCaseName . '/:action/*', array('controller' => $lowerCaseName));
}
}
Router::connect('/:username', array('controller' => 'users', 'action' => 'views'), array('pass' => array('username')));
Router::connect('/', array('controller' => 'home', 'action' => 'index'));
the problem is that i cannot route my controllers domain.com/controller without putting the action..
This will work: domain.com/blog/index, domain.com/forum/index, domain.com/users/login
This wont work: domain.com/blog it will be treated as username
Exclude the controller names from being matched in the username route. You should have a list of them to prevent people from registering with these names at all.
Put you code like this. this will not treat blog as username
Router::connect('/', array('controller' => 'home', 'action' => 'index'));
Router::connect('/blog', array('controller' => 'blog', 'action' => 'index'));
Router::connect('/:username', array('controller' => 'users', 'action' => 'views'), array('pass' => array('username')));
Thanks..!
I have a multi language website, but when I don't do a redirect with a setFlash, it deletes the language from the url. Example: if the contactform doesn't validate, it just does a setFlash without the redirect, so that user input data is not lost. But it does refresh the page and deletes the language part from my url. This does not happen when I do a redirect after my setFlash, because I give the language param with the redirect. Work flow:
I start on the page website.com/eng/contact (notice the language part). I fill in the contact form and fill in all required inputs. It redirects me to website.com/eng/contact/send. That's great and what I want. But when I don't give an valid email adres for example, it display an error (great), but the url has changed to website.com/forms/contact (notice the missing language part, and it doesn't use my routes). What am I doing wrong? My code:
Formscontroller.php
public function contact() {
if ($this->request->is('post')) {
$this->Form->set($this->request->data);
if ($this->Form->validates()) {
if($this->Form->save($this->request->data)){
$this->redirect(array('controller' => 'forms', 'action' => 'contact_success', 'language' => $this->Session->read('Config.language')));
} else {
$this->Session->setFlash(__('Er ging iets mis met het versturen van uw contactformulier, probeer het opnieuw.'), 'flash_error');
}
} else {
$this->Session->setFlash(__('Niet alle verplichte velden zijn ingevuld.'), 'flash_error');
}
}
}
routes.php
Router::connect('/:language/pages/*', array('controller' => 'pages', 'action' => 'display'));
Router::connect('/:language/contact', array('controller' => 'forms', 'action' => 'contact'), array('language' => 'ned|eng'));
Router::connect('/:language/contact/verzonden', array('controller' => 'forms', 'action' => 'contact_success'), array('language' => 'ned'));
Router::connect('/:language/contact/send', array('controller' => 'forms', 'action' => 'contact_success'), array('language' => 'eng'));
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::connect('/:language', array('controller' => 'pages', 'action' => 'display', 'home'), array('language' => 'eng|ned'));
Router::connect('/:language/:controller/:action/*', array(), array('language' => '[a-z]{3}'));
CakePlugin::routes();
require CAKE . 'Config' . DS . 'routes.php';
I was looking in the wrong direction for my problem. As ndm points out in his comment on my question, it had to do with the action of my form, it didn't have the language part in it. So thanks to ndm for pointing me in the right direction!
Hi I d'like to be able to rewrite my url. I have this format of url:
localhost/example/urlrewriting/Links/view/1
and I want to change this url to
http://localhost/example/urlrewriting/tt/my-link-1
In my Routes.php I have done this:
Router::connect('tt/:slug-:id',
array('controller' =>'links', 'action' => 'test'),
array('pass' => array('slug', 'id'), 'slug' => '[a-z0-9\-]+', 'id' => '[0-9]+'));
and in my controller I have this
public function test($param1, $param2){
debug($this->request->params);
}
I've always find this answer:
TtController could not be found.
cakephp 2.4.1
Please add / before the connect params like:-
Router::connect('/tt/:slug-:id',
array('controller' =>'links', 'action' => 'test'),
array('pass' => array('slug', 'id'), 'slug' => '[a-z0-9\-]+', 'id' => '[0-9]+'));
I have a problem with CakePHP route
Router::connect(
'/catalog/:slug/:slug2/*', array(
'controller'=>'pages',
'action'=>'view'
))
When I have url
/catalog/something/page:2 - it also catches this link. But it shouldn't, because there is no slash after params page:2, How to fix it? Thanks!!
I hope this may be helpful.
Router::connect(
'/catalog/:slug/:slug2/*', array(
'controller'=>'pages',
'action'=>'view'
), array('pass' => array('slug', 'slug2')));
and in your view file you can write like this to generate a link for above.
echo $this->Html->link('link', array(
'controller' => 'pages',
'action' => 'view',
'slug' => 'slug',
'slug2' => 'slug2'
));