2010-01-19 6 views
9

In bootstrap.php, wo Sie Routen festlegen, habe ich es schwer, sie zur Arbeit zu bringen. Ich habe vor einiger Zeit einige Dokumente gelesen, die ich nicht mehr finden kann, was sie erklärt. Hier ist eine meiner BeispieleKann jemand das Routing-System von Kohana 3 erklären?

Route::set('products', 'products/(type)', array('type' => '.+')) 
    ->defaults(array(
    'controller' => 'articles', 
    'action' => 'view_product', 
    'page' => 'shock-absorbers', 
    )); 

ich dachte, die eine Anfrage wie products/something würde laden die articles-Controller und die action_view_product() Verfahren bedeuten würde. Aber ich kann es nicht zur Arbeit bringen.

Kann mir bitte jemand genau erklären, wie sie funktionieren und welche Parameter die Methode hat?

Antwort

5

dachte ich, dass eine Anfrage bedeuten würde wie Produkte/etwas den Artikel Controller geladen werden würde, und die action_view_product Controller. Aber ich kann es nicht funktionieren.

Sie haben den Fettanteil falsch eingegeben. Es wird geladen action_view_product tatsächlich Methode der Artikel Controller:

class Controller_Articles extends Controller { 
    public function action_view_product() { 
     $params = $this->request->param(); 
     // if the uri is `products/something' then $params['type'] == 'something' 
    } 
} 

EDIT:

Oh mein Gott oh, dein Gott, warum habe ich nicht bemerkt !!!

Das eigentliche Problem liegt in Ihrem Routenmuster! Es sollte products/(<type>) sein, mit den spitzen Klammern. Diese werden Kohana darauf hinweisen, dass der "Typ" ein Parametername anstelle eines Literals sein soll.

+0

Sorry, dass war ein Tippfehler! Ich kann es immer noch nicht für mich arbeiten lassen. – alex

+0

hast du deine controller php-datei in den richtigen ordner gelegt? – Lukman

+0

Ja, ich habe eine Standardroute, die alle erfasst (und funktioniert in Ordnung) – alex

3

uff, sorry, senken dann und größer als Zeichen nicht richtig zeigt

'products/(type)' should be 'products/(<type>)' 
+0

oder noch besser: ''Produkt (/ )'', weil sonst 'Produkt' (ohne Schrägstrich) nicht übereinstimmen würde (obwohl Sie es vielleicht so wollen) – giorgio

3

Die Klammern optional Teile angeben (die Regex übereinstimmen, wenn sie fehlen). Diese können statisch sein und/oder benannte Variablen enthalten. Die spitzen Klammern eine benannte Variable in der Route anzuzeigen, die in der Steuerung über zugänglich ist:

$this->request->param('type'); 

ich den offiziellen Routing-Guide geschrieben, die Sie here lesen können, sollte es alle Ihre Fragen beantworten.

0

Für das Protokoll:

// From within a controller: 
$this->request->action; 
$this->request->controller; 
$this->request->directory; 

// Can be used anywhere: 
Request::instance()->action; 
Request::instance()->controller; 
Request::instance()->directory; 

Quelle

:

Das Verzeichnis, Controller und die Aktion kann wie so von der Anfrage als öffentliche Eigenschaften zugegriffen werden http://kohanaframework.org/3.0/guide/kohana/routing#request-parameters