Cakephp Remove plugin and controller name from url for any action - cakephp

I want to remove deal/deals for all the actions of deals controller:
http://example.com/deal/deals/voucher/dsfsdfdf should be http://example.com/voucher/cPH5aGr1
etc.

You should define you routes in you app/config/routes.php
Router::connect('/voucher/*', array('controller' => 'Deals', 'action' => 'voucher', 'plugin' => 'Deal'));

Related

Routing in CakePHP 2.6.9

I am using CakePHP 2.6.9.
I want to do following:
www.example.com/detail/10 should refer to controller => frontends and action => detail
www.example.com/admins/login should refer to controller => admins and action => login
I edited routes.php as follows:
Router::connect('/:action/*',
array('controller' => 'frontends', 'action' =>'detail'));
But when I try www.example.com/admins/login it shows the following error:
The action admins is not defined in controller FrontendsController
It proves that www.example.com/admins/login refers to
Router::connect('/:action/*',
array('controller' => 'frontends', 'action' =>'detail'));
Routing. I want
Router::connect('/:action/*',
array('controller' => 'frontends', 'action' =>'detail'));
will be only for controller => frontends and action=>detail, rest of url will work as default. Any idea?
this will do want you want.
Router::connect('/detail/*', array('controller' => 'Frontends', 'action' =>'detail'));
Mostly cakephp urls are like /controller/action/id. Your template of the route /:action/* tells that you are not using controller names in urls instead you are using only action names like /detail/id and /admins/id, and all actions are in Frontends controller. You can see from the error message that it tried to find admins action in Frontends conntroller.

Hide controller name when calling its methods

I'm creating a website using CakePHP.
It has user Registration and Login system.
So at first i have a controller called HomeController which has three methods
1) index();
2) login();
3) register();
by default index() method will execute.
i have the following code to call other two methods.
<? php
echo $this->Html->link('Login',array('controller'=>'Home','action'=>'login'),array('escape'=>FALSE));
echo $this->Html->link('Register',array('controller'=>'Home','action'=>'register'),array('escape'=>FALSE));
?>
So now when i click on the above links (login,register) it will call appropriate method and the url will be something like
www.example.com/home/login and www.example.com/home/register
Now i want to remove the controller name from the url since the method is in the same controller.
So the url should look like
www.example.com/login and www.example.com/register
is it possible??
Please help..
in app\Config\routes.php add following lines
Router::connect('/login', array('controller' => 'home', 'action' => 'login'));
Router::connect('/register', array('controller' => 'home', 'action' => 'register'));
It will convert default urls to your desired urls
www.example.com/login and www.example.com/register
Router::parseExtensions('json');
Router::connect('/*', array('controller' => 'home',
'action' => 'login'));
Router::connect('/login', array('controller' => 'home',
'action' => 'login'));

How to Create a URL in Controller like HtmlHelper

TLDR: How can I create a URL in the Controller similar to how I can use the HtmlHelper to create URLs in a View?
Problem:
I want to print the url of a controller action, in my controller (because I create my JSON string in my controller, not in a view)
In a View, I can use $this->Html->url(), but what about in a Controller?
Should I use defined constant like APP_DIR + Controller name + Controller action?)
Use the Router class.
$url = Router::url([
'controller' => 'Articles',
'action' => 'index',
'?' => ['page' => 1],
'#' => 'top'
]);
or the same thing, but in a more common/simple scenario:
$url = Router::url(['controller' => 'Articles', 'action' => 'index']);
Note: in Cake2.x, "Articles" would be lowercase.
CakePHP 2.x Router documentation
CakePHP 3.x 'Generating URLs' documentation

Url Rewriting of once controller - cake 2.0

I'm developing a simple CMS in CakePHP, right now it has 4 controllers in it(Menus,Site,Roles,Users), I want to rewrite one controller, but I'm having problem.
I use all the actions only as admins for admin purpose like admin_view, admin_add......
except siteController(this controller is only for frontend purpose)
I need my www.example.com/site/view/something_here must be replaced to www.example.com/something_here - this will be displayed in front-end so.
I added a line in my routes file:
Router::connect('/*', array('controller' => 'site', 'action' => 'view'));
But after adding this I couldn't able to use other controllers.
I again added some more lines before the above line:
Router::connect('/admin/Menus/*', array('controller' => 'menus', 'prefix' => 'admin'));
Same for all other controllers, but if I send any action or id in url it doesn't works.
like - http://www.exmple.com/admin/menus/[view/1] - the one inside square bracket doesn't works.
any Ideas on rewriting this?
I just answered a similar question on another thread.
To put the admin controller routes before the '/*'-route was the right idea, but the way you did it the router can't assign an action. You could use the following for each controller:
Router::connect('/admin/Menus/:action/*', array('controller' => 'menus', 'prefix' => 'admin'));
Or you could use the default prefix-routing routes, so you don't have to add a route for each new controller.
// prefix routing default routes with admin prefix
Router::connect("/admin/:controller", array('action' => 'index', 'prefix' => 'admin', 'admin' => true));
Router::connect("/admin/:controller/:action/*", array('prefix' => 'admin', 'admin' => true));

cakephp 1.3.11 plugin routing not working

I'm building a blog plugin for CakePHP. It is called 'blog'.
I am following the manual on plugin routing but my links won't work. http://book.cakephp.org/view/951/Plugin-routing
For example, when I am on this page: appname/blog/posts/index, I have a link to the index action of the users plugin. So I built my link as follows:
echo $this->Html->link(
__('List Users', true),
array(
'plugin' => 'users',
'controller' => 'users',
'action' => 'index'
)
);
But the link keep pointing to app/blog/users/index instead of app/users/users/index. Why is that?
PS: users is also a plugin (from CakeDC).
you can set routes like this:
Router::connect('/users', array('admin' => false, 'plugin' => false, 'controller' => 'tests', 'action' => 'test') );
'admin' is for admin routing and 'plugin' for plugin url.

Resources