2012-04-12 7 views
0

Ich benutze CakePHP 2.1. Hier ist der Deal ...Benutzerdefinierte Route Element funktioniert nicht in CakePHP

Ich möchte eine URL in diesem Format:

http://mysite.com/[username]/ 

Wo [username] dynamisch sein können und ruft die "Benutzer" Controller bereits umgesetzt.

Hier ist der Weg in routes.php definiert:

Router::connect(
    '/:username', 
    array('controller' => 'users', 'action' => 'profile'), 
    array(
     'pass' => array('username'), 
     'username' => '[a-zA-Z0-9][/-_.]+' 
    )); 

Wenn ich versuche, http://mysite.com/testuser diese Fehler erreichen werden angezeigt:

"Missing Controller 
Error: testuserController could not be found." 

Hier ist meine ganze routes.php Datei:

<?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). 
* 
* PHP 5 
* 
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org) 
* Copyright 2005-2012, Cake Software Foundation, Inc. (http://cakefoundation.org) 
* 
* Licensed under The MIT License 
* Redistributions of files must retain the above copyright notice. 
* 
* @copyright  Copyright 2005-2012, 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  MIT License (http://www.opensource.org/licenses/mit-license.php) 
*/ 

    Router::connect('/', array('controller' => 'home', 'action' => 'index')); 

    Router::connect(
    '/:username', 
    array('controller' => 'users', 'action' => 'profile'), 
    array(
     'pass' => array('username'), 
     'username' => '[a-zA-Z0-9][/-_.]+' 
    )); 

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

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

Ich habe mit etwas wie diesem versucht:

Router::connect(
    '/users/:username', 
    array('controller' => 'users', 'action' => 'profile'), 
    array(
     'pass' => array('username'), 
     'username' => '[a-zA-Z0-9][/-_.]+' 
    )); 

und so hat es funktioniert ...! Und dann kann ich mit: $ this-> request-> params ['pass'] [0]

So, jetzt ist es die Frage: Warum es nicht in der ersten Ebene des Pfades funktioniert (Domäne. com /: Spitzname)?

+0

Können Sie bitte posten Sie Ihre vollständigen Routen-Datei enthalten? – Joep

+0

@Joep es ist da :) – Line

+0

Ich bin nicht sicher, dass Sie müssen ': Benutzername' da drin, da es ein Parameter nicht ein ': Controller' oder ': action' muss möglicherweise das Handbuch zu überprüfen, http: // book.cakephp.org/2.0/en/development/routing.html#routes-configuration –

Antwort

0

Versuchen:

Router::connect('/*', array('controller' => 'users', 'action' => 'actionName')); 

Und dann in Ihrem Userscontroller, wenn Sie

public function foo($username){ 
    ... 
} 

$ username haben den Benutzernamen aus der URL

Verwandte Themen