2010-12-05 14 views
0

Ich habe eine URL in meiner CakePHP-Anwendung, die wie http://www.example.com/category/1 aussieht. Wo Kategorie ist der Name einer Aktion in der Website-Controller. Ich habe den Controller-Namen mit der CakePHP Routes-Datei entfernt. Und 1 ist die ID der Kategorie "Essen", deren Datensätze aus der Datenbank abgerufen werden müssen.Abrufen von Daten aus der Datenbank in CakePHP-Routen

Aber mein Klient verlangt, dass ich die URL als example.com/category/Food habe, ohne die numerische ID für bessere SEO.

Meine Frage ist, dass CakePHP Routes holen Sie den Namen der Kategorie ID aus der Datenbank und zeigen Sie es in der URL? Wenn ja, dann führe mich freundlich dazu, dies zu erreichen, da ich auf diesem Punkt fest stecke.

Jede Hilfe wird sehr geschätzt.

Antwort

0

Sie so etwas in Ihrer Routen haben könnte:

Routes::connect('/category/*', array('controller' => 'categories', 'action' => 'view')); 

Dann in Ihrem categories_controller :: Ansicht ($ catName), überprüfen Sie, ob dies zutrifft:

if($this->Category->hasAny(array('name' => $catName))) { 
    // your code here 
} else { 
    // set message in the view saying category not found 
} 

Es gibt viele Möglichkeiten, dies anzugehen, das ist nur eines, an das ich mich aus freien Stücken erinnere.

2

Zuerst erstellen Sie ein Feld namens category_url_title in Kategorien Tabellen. Dann fügen Sie die folgende Routing

//Route dynamic pages 
Router::connect(
    '/categories/:category_url_title', 
    array('controller'=>'categories', 'action'=>'view'), 
    array(
     'category_url_title' => '(?!add|view|delete\b)\b[a-zA-Z0-9_-]+', 
     'pass'=>array('category_url_title') 
    ) 
); 

Und Ansicht Verfahren in Kategorien Controller etwas wie sein Gebrüll

function view($category_url_title=null) { 

    $category = $this->Category->find('first', array('conditions'=> array('Category.category_url_title'=>$category_url_title))); 
    $this->set(compact('category')); 
} 

Hope this Ihnen helfen.

Verwandte Themen