2017-05-11 31 views
7

Próbuję zrobić, aby moja aplikacja CodeIgniter działała podobnie do WordPress.Routing w CodeIgniter dla (: any)

Chcę być w stanie dokonać tego rodzaju URL:

http://www.example.com/my-post-example

http://www.example.com/new-headline-here

http://www.example.com/i-love-stackoverflow

Moja routingu:

$route['(:any)'] = "core/index/$1"; 

które będą wymagały mojego wnętrza kontroler i przekazać nazwę strony do funkcji indeksu.

Potem odnośnika w mojej bazy danych dla nazwy strony i wyświetlić stronę do użytkownika. Jak na razie dobrze.

Jednak nie będzie wtedy, gdy chcę zadzwonić innego kontrolera. Na przykład:

http://www.example.com/admin/edit_page/3

http://www.example.com/admin/settings

Teraz zakładam moja trasa będzie po prostu złapać wszystkie te zasady i wysłać je do mojego kontrolera podstawowej. Czy istnieje sposób na zrobienie wyjątku dla niektórych stron? Czy jest to dobry pomysł, aby to sprawdzić w moim kontrolerze Core.

Na przykład

if ($page not in DB) { 
    // Call controller/method 
} 

To wydaje się nieco zbędny, ponieważ ja po prostu chcę CodeIgniter sobie z tym poradzić.

Odpowiedz

4

Reguła routingu używasz to jest OK dla Twojego celu.

Jeśli używasz http://www.example.com/admin/edit_page/3 ten link to wyśle ​​Ci admin kontroler i edit_page method.It nie użyje Trasy any regułę.

Jednak dostaniesz jeden problem Jeśli link wygląda tak

http://www.example.com/my-post-example/test 

spróbuje pójść my-post-example kontrolera i metody badania.

Ponownie http://www.example.com/admin użyje reguł trasy any, oznacza to, że przekieruje Cię do kontrolera podstawowego zamiast admin/index. W takim przypadku adres URL powinien być http://www.example.com/admin/index

Wreszcie Jeśli zadzwonisz drugą związek z kontrolera/nazwy metody będzie OK stosując regułę any

+0

Dzięki! Czy istnieje sposób na dopasowanie dowolnego wzorca URL? W tym z /? Więc admin/edit/lol/również przejdzie do core/index? Czy musiałbym dodawać (: any)/(: any)/(: any) przez cały czas? – Oliwol

+0

dodaj kolejną regułę przed '$ route ['(: any)'] =" core/index/$ 1 ";' rule '$ route ['admin/edit/lol'] =" core/index ";' –

+0

Co jeśli chcę przekierować dowolne dane do funkcji, takie jak: admin/edit/lol => core/index, a także admin/new/test => core/index. Czy istnieje lepszy sposób niż dodawanie poszczególnych reguł?Podobnie jak route ['admin/(: any)/(: any)'] - ale z potencjałem dodania trzeciego, czwartego i piątego do nieskończoności. – Oliwol