PHP Silex 路由本地化

标签 php routing locale silex

从 Silex 开始。

假设我想要一个本地化站点,其中所有路由都必须以 /{_locale} 开头并且不想重复自己:

$app->match('/{_locale}/foo', function() use ($app) {
return $app['twig']->render('foo.twig');
})
->assert('_locale', implode('|', $app['languages.available']))
->value('_locale', $app['locale.default'])
->bind('foo');

$app->match('/{_locale}/bar', function() use ($app) {
    return $app['twig']->render('bar.twig');
    })
    ->assert('_locale', implode('|', $app['languages.available']))
    ->value('_locale', $app['locale.default'])
    ->bind('bar');

理想情况下,我想创建一个与语言环境匹配的基本路由,并以某种方式对其进行子类化,但我自己无法弄清楚如何以优雅的方式触发它。

最佳答案

我认为您可以使用mount 函数委托(delegate)本地检测:

你为每个你想支持的本地安装一个路由,但它们重定向到同一个 Controller :

    $app->mount('/en/', new MyControllerProvider('en'));
    $app->mount('/fr/', new MyControllerProvider('fr'));
    $app->mount('/de/', new MyControllerProvider('de'));

现在本地可以成为你 Controller 的一个属性:

class MyControllerProvider implements ControllerProviderInterface {

    private $_locale;

    public function __construct($_locale) {
        $this->_locale = $_locale;
    }

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


        $controler->match('/foo', function() use ($app) {
                            return $app['twig']->render('foo.twig');
                        })
                ->bind('foo');

        $controler->match('/bar', function() use ($app) {
                            return $app['twig']->render('bar.twig');
                        })
                ->bind('bar');

        return $controler;
    }

}

关于PHP Silex 路由本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26673037/

相关文章:

ruby-on-rails - 从引擎中重定向到父 Rails 应用程序的路由

java - 设置土耳其语和英语语言环境 : translate Turkish characters to Latin equivalents

ruby-on-rails - Rails en.yml 在哪里

php - mysql 中主表(联合)及其左表的计数、求和

php - 为什么我使用 PHP 发送邮件,但收件人收到附件名为 "mail.html"的邮件?

python - 使用 RabbitMQ 和 Python 进行基于内容的路由

java - 将日本日期格式(2013年11月24日)转换为普通日期格式(2013-11-24)

javascript - jQuery slider PHP/HTML 问题

php - 如何将32位系统上的ip2long负值存储到MySQL

python - django中是否有类似于 'rake routes'的东西?