dos8244
2010-03-01 02:15
浏览 50
已采纳

CakePHP Router :: connect()别名?

Is it possible in CakePHP to have URL aliases in routes.php? Or by what other means can achieve something equivalent:

Lets assume I have some paginated views. Among the possible orderings there are particular ones I want to bind to a simple URL. E.g.:

How do I add parameters to a Router::connect()? Pseudo code:

Router::connect('/'.__('headlines',true),
        array(
        'controller' => 'posts',
        'action' => 'listView'
        'params' => 'page:1/sort:Post.created/direction:desc',
        )
);
  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

2条回答 默认 最新

  • drm30963 2010-03-01 02:40
    最佳回答

    Note that the Router "translates" a URL into Controllers, Actions and Params, it doesn't "forward" URLs to other URLs. As such, write it like this:

    Router::connect('/headlines',
        array(
            'controller' => 'posts',
            'action' => 'listView'
            'page' => 1,
            'sort' => 'Post.created',
            'direction' => 'desc'
        )
    );
    

    I don't think '/'.__('headlines', true) would work, since the app is not sufficiently set up at this point to translate anything, so you'd only always get the word in your default language back. Also, you couldn't switch the language anymore after this point, the first use of __() locks the language.

    You would need to connect all URLs explictly. To save you some typing, you could do this:

    $headlines = array('en' => 'headlines', 'de' => 'schlagzeilen', ...);
    foreach ($headlines as $lang => $headline) {
        Router::connect("/$headline", array('controller' => ..., 'lang' => $lang));
    }
    

    That will create a $this->param['named']['lang'] variable, which you should use in the URL anyway.

    评论
    解决 无用
    打赏 举报
查看更多回答(1条)

相关推荐 更多相似问题