2012-04-03 10 views
0

Ich habe 2 Controller account.php und address.php im selben Verzeichnis APP/Controller. Für den ersten Controller account.php, benutze ich Standard-Router für URI wie: account/create, account/login, account/logout ... Wenn ich den zweiten Controller schreibe, möchte ich den ganzen URI von address.php mit Account/Adresse starten /. Wie Sie hier sehen können, nehme ich die gleichen URI-Router-Übereinstimmungen mit Account-Controller.Kohana 3.2 Router für einen Controller mit einem Präfix URI gehört zu einem anderen Controller

Mein erster Ansatz:

// Add new address 
Route::set('address', 'account/address/<action>') 
     ->defaults(array(
       'controller' => 'address', 
       'action'  => 'index', 
     )); 

Meine Adresse Controller

public function before() 
{ 
    parent::before(); 

    if (! Auth::instance()->logged_in()) 
    { 
     // Redirect to a login page (or somewhere else). 
     $this->request->redirect(''); 
    } 
} 



// nothing here 
public function action_index() 
{ 
    $this->request->redirect(''); 
} 


// create account 
public function action_create() 
{ 

    // Create an instance of a model 
    $profile = new Model_Address(); 

    // received the POST 
    if (isset($_POST) && Valid::not_empty($_POST)) 
    { 

     // // validate the form 
     $post = Validation::factory($_POST) 
     ->rule('firstname', 'not_empty') 
     ->rule('lastname', 'not_empty') 
     ->rule('address', 'not_empty') 
     ->rule('phone', 'not_empty') 
     ->rule('city', 'not_empty') 
     ->rule('state', 'not_empty') 
     ->rule('zip', 'not_empty') 
     ->rule('country', 'not_empty') 
     ->rule('primary_email_address', 'email'); 

     // if the form is valid and the username and password matches 
     if ($post->check()) 
     { 

      if($profile->create_profile($_POST)) 
      { 
       $sent = kohana::message('profile', 'profile_created'); 
      } 

     } else { 
      // validation failed, collect the errors 
      $errors = $post->errors('address'); 
     } 

    } 

    // display 
    $this->template->title = 'Create new address'; 
    $this->template->content = View::factory('address/create') 
      ->bind('post', $post) 
      ->bind('errors', $errors) 
      ->bind('sent', $sent); 
} 

Es scheint in Ordnung zu sein, aber die Router Konto/Adresse/erstellen funktioniert nicht. Kohana gibt 404 Nachricht für diesen URI aus.

Weiß jemand, warum es passiert?

Antwort

4

Ich habe Ihre Route auf meinem System überprüft und es funktioniert gut, also nehme ich an, der Fehler ist woanders. Überprüfen Sie, ob Ihr Controller Klassennamen Controller_Address ist, versuchen auch in der Bootstrap diese Route als erste zu setzen, wie die docs sagen:

ist es wichtig zu verstehen, dass Routen in der Reihenfolge abgestimmt sind sie sind hinzugefügt, und sobald eine URL mit einer Route übereinstimmt, ist das Routing im Wesentlichen "gestoppt" und die verbleibenden Routen werden nie ausprobiert. Da die Standardroute fast allem entspricht, einschließlich einer leeren URL , müssen neue Routen davor eingefügt werden.

Eine andere Sache, nicht mit der Frage verbunden - Sie sollten wirklich Validierung in Ihrem Modell platzieren. Der Controller ist nicht der richtige Ort für ihn;)

+0

Awesome Mann, setzen es in erster Priorität macht den Trick. Und ja, Sie haben recht, die Validierung sollte stattdessen im Modell erfolgen, damit unser Controller sauber und lesbar aussieht. – lnguyen55