Wekslie
Wekslie

Reputation: 124

Routing in Kohana 3.3.1

I recently started working with the kohana 3.3.1 framework and ran into some problems.

I want to create different routes for different entry points. Right now, this is the default route, which seems to work fine(I think):

Route::set('default', '(<controller>(/<action>(/<id>)))')
    ->defaults(array(
        'controller' => 'welcome',
        'action'     => 'index',
    ));

When I go to the website, it displays 'hello, world!'.

I have a controller called Street, located in application/classes/Controller/Street.php.

The code to this controller is:

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Street extends Controller {

    public function action_index()
    {
        $this->response->body('hello, street!');
    }

The problem is, that I want to type /something behind the URI, and it should redirect to the defined controller, and action. But it doesn't seem to work. I get 404 error's when I type ANYTHING behind the default URI.

For routes, i use this

/**
 * Set the routes. Each route must have a minimum of a name, a URI and a set of
 * defaults for the URI.
 */


Route::set('test1', 'street/<id>')
    ->defaults(array(
        'controller' => 'street',
        'action'     => 'index',
    ));

Route::set('default', '(<controller>(/<action>(/<id>)))')
    ->defaults(array(
        'controller' => 'welcome',
        'action'     => 'index',
    ));

Any help would be gladly appreciated.

EDIT

I just tried @Darsstar 's instruction to go to /index.php/street, and it worked! But now, when I try to go to /index.php/street/derp, I get an error saying

The requested URL derp was not found on this server.

So it's not yet working properly I guess

Upvotes: 1

Views: 1814

Answers (1)

Darsstar
Darsstar

Reputation: 1895

Since the /index.php/street version works go and read the Clean URLs tutorial if you haven't already. If you have, double check everything!

If you have just those two routes, in that order, /index.php/street/derp should have matched the route 'test1'.

The error message 'The requested URL derp was not found on this server.' says you went to /index.php/derp, not index.php/street/derp. Which would match the default route and be dispatched to Controller_Derp::action_index(), but it doesn't exist so Request_Internal::execute() throws a HTTP_Exception_404.

The default route is more of and example. The is a discussion on Kohana's issue tracker to remove it since a catchall default route is a bad practice. Routes should be specific. I recommend to remove it.

And if you think having a catchall route is a good way to catch all 404 requests, please let the Custom Error Pages tutorial prove you wrong.

Upvotes: 3

Related Questions