gpt4 book ai didi

PHP Silex 路由本地化

转载 作者:可可西里 更新时间:2023-10-31 22:42:58 25 4
gpt4 key购买 nike

从 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com