Phalcon PHP - 如何定制路由以使网址像wordpress一样友好

时间:2013-09-11 19:12:26

标签: php routes phalcon

我想让我的网址友好:

http://abc.com/I-want-to-make-my-url-friendly-like

http://abc.com/my-category/I-want-to-make-my-url-friendly-like

在Phalcon。

非常感谢。

2 个答案:

答案 0 :(得分:1)

您可以在依赖自定义功能的路线上使用conversions

// The action name allows dashes, 
// an action can be: /products/new-ipod-nano-4-generation
$router
  ->add(
    '/{category:[[a-z\-]+]/{slug:[a-z\-]+}', 
    array(
        'controller' => 'products', // This can be any controller you want
        'action'     => 'show' // Same here
    )
  )
  ->convert(
    'slug', 
    function ($slug) {
        return str_replace('-', '', $slug);
    }
  )
  ->convert(
    'category', 
    function ($category) {
        return str_replace('-', '', $category);
    }
  );

答案 1 :(得分:0)

感谢Nikolaos Dimopoulos,您的回复意味着您将slugs转换为有效的功能。我找到了我的问题的答案(在我的项目中有3个级别类别):

   // Category
   $router->add(
        '/[a-z0-9-]{3,}/',
        array(
            'controller' => 'category',
            'action'     => 'index'
        )
    );
    $router->add(
        '/[a-z0-9-]{3,}/[a-z0-9-]{3,}/',
        array(
            'controller' => 'category',
            'action'     => 'index'
        )
    );
    $router->add(
        '/[a-z0-9-]{3,}/[a-z0-9-]{3,}/[a-z0-9-]{3,}/',
        array(
            'controller' => 'category',
            'action'     => 'index'
        )
    );

    // Static post
    $router->add(
        '/[a-z0-9-]{3,}',
        array(
            'controller' => 'post',
            'action'     => 'view',
            'slug'       => 1
        )
    );  

    // Product
    $router->add(
        '/[a-z0-9-]{3,}/([a-z0-9-]{3,})',
        array(
            'controller' => 'product',
            'action'     => 'view',
            'slug'       => 1
        )
    );
    $router->add(
        '/[a-z0-9-]{3,}/[a-z0-9-]{3,}/([a-z0-9-]{3,})',
        array(
            'controller' => 'product',
            'action'     => 'view',
            'slug'       => 1
        )
    );
    $router->add(
        '/[a-z0-9-]{3,}/[a-z0-9-]{3,}/[a-z0-9-]{3,}/([a-z0-9-]{3,})',
        array(
            'controller' => 'product',
            'action'     => 'view',
            'slug'       => 1
        )
    ); 

如果有人可以对此进行优化,请将其作为另一个答案发布。