【问题标题】:Dynamic routing in cakephp while adding new products在添加新产品时在 cakephp 中动态路由
【发布时间】:2013-07-03 05:16:48
【问题描述】:

我想在我的 cakephp 网站中进行动态路由,其中​​有一个名为 products 的表。最初我为每个产品做了一个静态路由,但是当添加新产品时,它会产生问题,因为有人必须手动输入路由每个新产品的路径,这似乎不太用户友好..最初我这样做了

Routing::connect('/portfolio/product_name1',array( 'controller'=>'products','action'=>'view',1));
Routing::connect('/portfolio/product_name2',array( 'controller'=>'products','action'=>'view',2));
Routing::connect('/portfolio/product_name3',array( 'controller'=>'products','action'=>'view',3)); 

等 x 产品。但如果有人在一段时间后添加另一个产品,他们也必须更改路线文件。有没有可以保持动态的选项?我的 view() 操作将 id 作为参数,我如何从函数 view() 的 url 中获取另一个名为 productname 的字段。是否可以通过“命名”参数来做到这一点。我通过 cake 中的“路由”面包店,但这一切对我来说似乎很混乱。有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: cakephp cakephp-2.0


    【解决方案1】:

    在我看来,您想做一些 slug 路由。基本上,您的路线需要是这样的

    Routing::connect('/portfolio/:slug',
                      array( 'controller'=>'products', 'action'=>'view'),
                      array('pass'=>array('slug'));
    

    我称它为 slug 是因为它是一个更熟悉的术语,但您可以将其命名为 :product-name 或任何您想要的名称。如果您搜索“cakephp slug”,您将找到更多关于您想要的指导。

    无论如何,该路由会将portafolio/good-product之类的网址定向到

    ProductsController->view('good-product')
    

    在查看操作中,您可以将该产品名称(slug)转换为一个 id。为此在模型中创建一个函数,例如 slugToId 并从控制器调用它

    public function view($slug) {
        $productID = $this->Producto->slugToId($slug);
    }
    

    在模型中,slugToId 函数可以进行简单的查找。嗯,这个函数在模型中不是必需的,但更好的做法是,特别是如果你想在其他模型中做 slug 的事情,你可以重用这个函数。

    现在,你也可以使用反向路由,所以调用

    $this->redirect(array('controller'=>'products',
                          'action'=>'view',
                          'slug'=>'super-awesome-product'))
    

    将调用网址cake.com/portfolio/super-awesome-product

    阅读 this tutorial 的蛞蝓,您不需要做那里建议的那么多更改,但它是一个很好的指南。

    【讨论】:

      猜你喜欢
      • 2017-06-26
      • 2021-07-22
      • 2012-05-31
      • 1970-01-01
      • 2014-03-13
      • 2018-07-27
      • 2011-08-07
      • 1970-01-01
      • 2022-11-05
      相关资源
      最近更新 更多