如何使用codeigniter创建动态,任意路由? 因此,默认路由系统(控制器/方法)在很大程度上适用于我。 但是,我想让网站所有者能够为网站内的任何控制器创建任意友好的URL。
例如,如果此网站有一个处理文章的控制器,则任何给定文章的正常地址都是
example.com/articles/read/23421
如果它有另一个处理产品的控制器,那么给定的产品通常会存在于
example.com/products/view/234234
但是,除此之外,我希望让网站所有者能够说“好的,所以现在可以访问文章23421
example.com/my-vacation-in-vegas
和产品234234将存在
example.com/flat-screen-tv
我能做些什么来实现这个功能吗?目前,我理解的路由系统是固定的,我必须在routes.php中对每个项目进行硬编码。
谢谢!
答案 0 :(得分:0)
要实现此目的,您必须确保没有插入交叉表双重名称。如果所有者想要制作并且文章名为example.com/product/flat-screen-tv
,则在插入之前应该检查两个表中是否存在 - 不仅仅是在文章表中。而不是你可以使用不同的控制器与适当的uri段,以区分产品和文章。它看起来像example.com/article/flat-screen-tv
和S
- 类似于你现在的东西,但是在网址中有slug,而不是ID。建议使用第二个(使用[product | article] uri段),因为第一个不跟随SOLID中的APPPATH.'config/routes.php'
,并且随着产品和文章数量的增加而查询速度会慢一些。从DB检查answer here插入和获取slug。
假设您已经拥有构建系统(关于您发布的预制URI),$config['article/(:any)'] = 'article/read/$1';//here $1 is slug and not id which you have to change in Article controller, read() method as in Q/A link i posted above
$config['product/(:any)'] = 'product/view/$1'; same logic as in previous route
// By personal affinity I used singular for product and article
中的路线可能如下:
select t1.num||','|| t2.num
from t t1 join t t2
on t1.id!=t2.id
Routing system并没有那么多固定,你可以使用通配符,如(:any),(:num)甚至正则表达式。 Suma sumarum,你必须存储用于创建URL的文章和产品的slu ..