2012-10-30 30 views
0

我使用CakeRoute类为php创建路由。让我的CakePHp链接有虚荣的URL

parse方法工作得很好,但如何让我的应用程序的URL被映射liek:

mydomain.com/teachers/contentProfile/1 

to 

mydomain.com/chris-willis 

我改写了parse()方法,使我的蛞蝓正确映射的请求,但这些链接不会转换为mydomain.com/chris-willis,它们仍然是旧的方式。

+0

这是愚蠢的,但那个是顶级的正常工作(我硬编码的问题:http://stackoverflow.com/questions/13127337/routing-in-cakephp-to-vanity-urls/13127705#13127705 )我不想在db中执行查询,并且每次都重新生成路由 – cdub

回答

0

mydomain.com/teachers/contentProfile/1

传递芯子代替id来的链接:阵列( '蛞蝓'=> $老师[ '教师'] [ '蛞蝓' ]);

mydomain.com/teachers/contentProfile/

+0

我可以通过许多链接进行更改。应该有更好的方式使用匹配($ url)功能 – cdub

0

首先,确保你与数组要指定网址的;如果您提供了字符串url,CakePHP无法翻译url。的

$this->Html->url(array('controller' => 'teachers', 'action' => 'contentProfile', $id)); 

代替

$this->Html->url('/teachers/contentProfile/' . $id); 

您可能必须交替提供塞而不是ID

$this->Html->url(array('controller' => 'teachers', 'action' => 'contentProfile', 'slug' => 'teacher-name')); 

或者,更新您的自定义路由类match()的方法来查找正确的slu when时只提供一个id。

class CustomRoute { 
    match($url) { 
    if (empty($url['slug']) && isset($url[0])) { 
     // lookup slug 
    } 
    unset($url[0]); 
    return parent::match($url); 
    } 
} 
+0

真棒,我必须在我回家时尝试这个,你只是今天回答我所有的问题。在match()中,我是否需要添加像$ url ['slug'] ='my-slug'这样的slu?? – cdub