Silex 2:在路由中声明{_locale}可选

时间:2016-08-19 11:53:08

标签: php controller routing locale silex

我想路由这些网址:

>>> add(1)(2)()
3
>>> add(1)(2)(3)()  # and so on..
6

我创建了这个Controller类:

/hello/{name}
/en/hello/{name}
/es/hello/{name}

它已经以这种方式注册:

<?php

namespace Fw\Controllers;

use Silex\Application;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Fw\Application as FwApplication;

class Hello implements ControllerProviderInterface {

    const URL_BASE = '/hello';
    const URL_BASE_LOCALE = '/{_locale}/hello';

    public function connect(Application $app) {
        $controllers = $app['controllers_factory'];

        $controllers
                ->get('/{name}/', array($this, 'nameAction'))
                ->bind('hello_name')
        ;

        return $controllers;
    }

    public function nameAction(FwApplication\ApplicationBase $app, Request $request, $name) {
        return new Response('Hello ' . $name, 200);
    }
}

此URL效果很好:/ hello / foo 但是这个不是:/ en / hello / foo,显示了这个错误:

  

RouterListener.php第125行中的NotFoundHttpException:找不到路由   for&#34; GET / en / hello / foo /&#34;

似乎第二个&#34; mount&#34;句子被覆盖到第一个。

有人可以帮我解决这个问题吗?如何使用可选的{_locale}?

设置路由

感谢。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题并编写了服务提供程序,它自动将语言环境添加到所有路由https://github.com/pmaxs/silex-locale。可能会满足您的要求。