dcd0181
dcd0181

Reputation: 1503

Cakephp route - Missing Controller

I'm trying to create a static /terms page within my CakePHP application. I have a terms.ctp in app/View/Pages and the following in app/Config/routes.php

<?php
/**
 * Routes configuration
 *
 * In this file, you set up routes to your controllers and their actions.
 * Routes are very important mechanism that allows you to freely connect
 * different URLs to chosen controllers and their actions (functions).
 *
 * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 * @link          http://cakephp.org CakePHP(tm) Project
 * @package       app.Config
 * @since         CakePHP(tm) v 0.2.9
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 */
/**
 * Here, we are connecting '/' (base path) to controller called 'Pages',
 * its action called 'display', and we pass a param to select the view file
 * to use (in this case, /app/View/Pages/home.ctp)...
 */
    Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
/**
 * ...and connect the rest of 'Pages' controller's URLs.
 */
    Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));

/**
 * Load all plugin routes. See the CakePlugin documentation on
 * how to customize the loading of plugin routes.
 */
    CakePlugin::routes();

/**
 * Load the CakePHP default routes. Only remove this if you do not want to use
 * the built-in default routes.
 */
    require CAKE . 'Config' . DS . 'routes.php';

    Router::connect('/terms', array('controller' => 'pages', 'action' => 'display', 'terms'));

However when visiting http://cakeapp.com/terms I get a Missing Controller error:

Error: TermsController could not be found.

Any ideas?

Upvotes: 1

Views: 3495

Answers (2)

cornelb
cornelb

Reputation: 6066

move the route up: (before calling CakePlugin::routes();), otherwise, this route will be ignored

Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
/**
* ...and connect the rest of 'Pages' controller's URLs.
*/
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));

Router::connect('/terms/', array('controller' => 'pages', 'action' => 'display', 'terms'));

Upvotes: 6

Kai
Kai

Reputation: 3823

Try removing the ending slash:

Router::connect(
    '/terms', 
    array(
        'controller' => 'pages', 
        'action' => 'display', 'terms'
    )
);

Upvotes: 3

Related Questions