代码之家  ›  专栏  ›  技术社区  ›  sibidiba

cakephp router::connect()别名?

  •  1
  • sibidiba  · 技术社区  · 15 年前

    cakephp中有没有可能在routes.php中有URL别名?或者通过什么其他方法可以达到同样的效果:

    假设我有一些分页视图。在可能的订单中,有一些特定的订单我希望绑定到一个简单的URL。例如。:

    如何向router::connect()添加参数?伪代码:

    Router::connect('/'.__('headlines',true),
            array(
            'controller' => 'posts',
            'action' => 'listView'
            'params' => 'page:1/sort:Post.created/direction:desc',
            )
    );
    
    2 回复  |  直到 13 年前
        1
  •  3
  •   deceze    15 年前

    请注意,路由器将一个URL“翻译”为控制器、操作和参数,它不会将URL“转发”到其他URL。因此,请这样写:

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

    我不认为 '/'.__('headlines', true) 这是可行的,因为应用程序在这一点上没有足够的设置来翻译任何东西,所以你只能把默认语言中的单词取回来。而且,在这之后,你再也不能切换语言了,第一次使用 __() 语言。

    您需要明确地连接所有URL。要保存一些键入内容,可以执行以下操作:

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

    这将创建一个 $this->param['named']['lang'] 变量,您可以 应该 无论如何在URL中使用。

        2
  •  3
  •   B3ro    13 年前

    是的,有可能…bootstrap.php在路由之前加载,因此如果设置了如下内容:

    session_start();
    if(isset($_SESSION['lng'])){
        Configure::write('Config.language', $_SESSION['lng']);
    }
    

    …在应用程序控制器的beforefilter中:

    $language = 'xy';
    Configure::write('Config.language', $language);
    $_SESSION['lng'] = $language;
    

    所以初始页面会提示您输入语言,重定向到xy.site.com或www.site.com/xy,无论您喜欢什么。现在第二次渲染将更改 $language 以及页面上的链接和设置 $_SESSION['lang']

    所有路由器链接如下:

    Router::connect(__('/:gender/search/:looking_for/*'), array('controller' => 'users', 'action' => 'search'));
    

    将成为:

    Router::connect(__('/:gender/trazi/:looking_for/*'), array('controller' => 'users', 'action' => 'search'));
    

    或:

    Router::connect(__('/:gender/suche/:looking_for/*'), array('controller' => 'users', 'action' => 'search'));
    

    100%测试,适用于Cakephp 2.2。如果将子域/语言URL解析器放在引导程序本身中,还可以进一步改进…