I know there are a couple of other topics about this subject, but non of them seems to fit my needs.
What I have
I have LogsController
instead of LogController
(plural) because CakePHP wants you to have controllers in plural.
But as you might know/notice, example.com/log/
will never use LogsController
because of the missing 's' in the url.
Now, I want to have /log/*
being redirected to /logs/*
. Works perfectly fine with the following code:
Router::connect ('/log/*', array('controller'=>'logs'));
But, when I try to access example.com/log/actions/foo/bar
it doesn't seem to work. So after some Googeling I found this:
Router::connect ('/log/:action/*', array('controller'=>'logs'));
Works great. But now when I'm trying to access example.com/log/ again, it says
Error: LogController could not be found.
Question
So my question is, how do I set up an alias for my url so that /log/
will use LogsController
instead of trying to use LogController
.
I have a few more Controllers where I'd like to change this, like flight => FlightsController
, profile => ProfilesController
.
Have a look at this question. It is about the same subject, but slightly different. It might help you in some way.
Ok, with the help of some other people on IRC and stuff like that. I found out the following.
A combination of
Router::connect('/flight/:action/*', array('controller'=>'flights'));
Router::connect('/flight/*', array('controller'=>'flights'));
does the trick. I tried this before, but in a other order, like so:
Router::connect('/flight/*', array('controller'=>'flights'));
Router::connect('/flight/:action/*', array('controller'=>'flights'));
which doesn't work.
So the first 2 lines of code in this post solved it for me. Another guy told me that the solution of Arun Jain isn't a proper solution, because it changes the nameconventions in the core as well. Which will cause problems with the FormsHelper and classes like that. So I think I will prefer the code in this post since this is just an alias instead of a core changing piece of script. Thanks for the help anyway.
To do this with routing the correct approach is as follows.
Router::connect('/flight', array('controller'=>'flights','action'=>'index'));
Router::connect('/flight/:action/*', array('controller'=>'flights'));
This tells the router that when an action is found in the URL to use it, but it no params are found then to default is to use the index action.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With