I'm using cakephp 2.3.8 and I want to create custom content for my homepage. I'm having trouble getting anything from the Pages Controller to the home.ctp view
In my Pages Controller I've created a home function :
public function home() {
$test = 'test';
$this->set(compact('test'));
}
But when I go to home and check with the debug kit I can see there is no $test variable.
How do I get information from the controller to the view for the home page?
My guess is that the default route for the pages controller is causing you trouble:
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
So when you go to /pages/home, it thinks it's got to execute the 'display' action still.
Try putting a route above it like this:
Router::connect('/pages/home', array('controller' => 'pages', 'action' => 'home'));
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
That way, the home page will render your home action, and all others will render the default 'display' action.
That's all in /app/config/routes.php.
Related
I am new on Cakephp. I am using latest version of cakephp. I have created an controller "PostsController" and want to make it home page. But when I have set it to home page from routes.php nothing happens. I am using subdomain like - cakephp.example.com. Here is my routes.php code
$routes->connect('/', ['controller' => 'Posts', 'action' => 'index', 'home']);
Can anyone please help me why it is not working? Is there anything need to do in htaccess file?
Router: (only once in your router class)
$routes->connect('/', ['controller' => 'Posts', 'action' => 'index']);
src/Controllers/PostsController:
public function index()
{
// your code here
}
src/Template/Posts/index.ctp
<h1>Hello world</h1>
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.
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 do I show the URL through CroogoRouter::connect function in CakePHP?
I passed the name of controller and action my routes file like:
CroogoRouter::connect('/', array('admin' => true, 'controller' => 'dashboard', 'action' => 'index'));
and I get redirected to the dashboard page, but I do not see the URL properly. I want my URL as localhost/abc/admin/dashboard and it is showing as localhost/abc only.
Since you are using the webroot (/) as route alias, it will not show the admin/dashboard bit. If you really want that (I'd discourage it if it's just for fancy display purposes), you should create a simple controller action that redirects. For example if you alter the route to this:
CroogoRouter::connect('/', array('controller' => 'dashboard', 'action' => 'home'));
And then in the DashboardsController create this action:
public function home() {
$this->autoRender = false; // We have no view, so don't render anything
$this->redirect(array('admin' => true, 'controller' => 'dashboard', 'action' => 'index'));
}
It should display the URL as you want it. Again, if it's only for display purposes (to make it look "nice") and not for any SEO kind of purpose, I'd discourage using such an ugly workaround. But it should do the trick either way.
Can you please check the controller name i think controller name should be dashboards or something.
check this link may be helpful http://bakery.cakephp.org/articles/Frank/2009/11/02/cakephp-s-routing-explained
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));