urlManager mit Permalink für Beitrag

Hallo,

Ich habe meinen urlManager so konfiguriert:




/* General */

'<controller:\w+>/<id:\d+>'=>'<controller>/view',

'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',

'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',

				

/* Blog */

'blog/<action:\w+>/<id:\d+>'=>'blog/<action>',

'blog/<action:\w+>'=>'blog/<action>',

'blog/<title:.*?>'=>'blog/viewTitle',



So das bei www.xyz.de/blog/testbeitrag die Action "viewTitle" statt "view" aufgerufen wird. Ich lasse vor dem speichern des Titels den Titel als Permalink in einem separaten Feld in der DB speichern. Beim Permalink ersetzte ich Sonderzeichen durch "", Umlaute durch ae, oe, ue und Leerzeichen durch "-". Ich dachte auch es hätte geklappt, hab es bisher aber nur bei Titeln mit Leerzeichen getestet. Also z.b. www.xyz.de/blog/testbeitrag-nummer-zwei. Dann funktioniert es prima, bei www.xyz.de/blog/testbeitrag aber nicht…dann wird nur ein 404 Fehler angezeigt. Ich denke mal es hat mit dem urlManager zu tun? Habe auch einmal die Reihenfolge geändert, also den Blog Teil vor dem allgemeinen Teil, hat aber auch nicht geholfen.

Vielen Dank für die Hilfe

Hallo demo88,

das liegt einfach daran das "testbeitrag" von der 2. Regel erfasst wird:

[PHP]‘blog/<action:\w+>’=>‘blog/<action>’[/PHP]

\w repräsentiert die Zeichenklasse [a-zA-Z_0-9] welche wiederrum auf deinen Parameter "tesbeitrag" zutrifft. Eine Action mit dem Namen testbeitrag gibt es allerdings nicht.

"testbeitrag-nummer-zwei" fällt aufgrund der Bindestriche nicht in die zweite, sondern die dritte (gewünschte) Regel:

[PHP]‘blog/<title:.*?>’=>‘blog/viewTitle’[/PHP]

Du musst also deine regulären Ausdrücke anpassen. Zum Beispiel in dem du die actions explizit aufzählst

[PHP]‘blog/<action:(action1|action2|action3)>’=>‘blog/<action>’[/PHP]

Ach guck an, das ist ja irgendwie logisch;) Vielen Dank!

Gerne, wobei du den Blog Teil trotzdem vor dem General Teil setzen musst da sonst die Regeln garnicht erst erreicht werden!

Werd ich machen, danke nochmal.