Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony开关语言_Php_Symfony1_Symfony 1.4 - Fatal编程技术网

Php Symfony开关语言

Php Symfony开关语言,php,symfony1,symfony-1.4,Php,Symfony1,Symfony 1.4,我使用symfony 1.4.11。用户可以在我的布局中切换语言 <?php foreach (sfConfig::get('app_cultures_enabled') as $key => $lng): ?> <?php echo link_to_if($sf_user->getCulture() != $lng, "<img src=\"/images/flags/$lng.png\" alt=\"$lng\">", pr

我使用symfony 1.4.11。用户可以在我的布局中切换语言

<?php foreach (sfConfig::get('app_cultures_enabled') as $key => $lng): ?>
    <?php echo link_to_if($sf_user->getCulture() != $lng,
    "<img src=\"/images/flags/$lng.png\" alt=\"$lng\">", 
    preg_replace('/sf_culture=[a-z][a-z]/', 'sf_culture='.$lng, $sf_context->getRouting()->getCurrentInternalUri(true)))?>
  <?php endforeach ?>
当我转到这一页时,我有一个错误:

“/:sf\u culture/page/:slug”路由缺少一些必需参数(:slug)。

我认为这是一个问题

<?php echo link_to_if($sf_user->getCulture() != $lng,
        "<img src=\"/images/flags/$lng.png\" alt=\"$lng\">", 
        preg_replace('/sf_culture=[a-z][a-z]/', 'sf_culture='.$lng, $sf_context->getRouting()->getCurrentInternalUri(true)))?>


它无法生成与slug的链接,或者..

如果我读对了,看起来您正试图使用
$sf\u context->getRouting()->getCurrentInternalUri(true)
模拟slug变量

我从来没有这样做过语言切换链接,但基本上如果这样做有效,您需要将其作为一个名为“slug”的变量传递给路由。在这个神奇的链接到函数的某个地方,您需要:

'&slug=' . $slug // the slug!
。。。假设slug是路由规则所期望的命名参数

更新:

我通常会这样改变语言:

我会在没有模板的情况下创建一个单独的操作(例如changeLanguage),然后使用该语言作为参数创建指向该操作的链接:

mysite.com/change-language/fr/ (?lang=fr)
mysite.com/change-language/de/ (?lang=de)
mysite.com/change-language/es/ (?lang=es)
在该操作中,我使用
$this->getUser()->setCulture($lang)
更改语言和任何我想做的事情,然后使用
$this->redirect($request->getReferer())
将用户重定向回他们来自的页面。如果你的应用程序需要使用多语言URL,我会确保这些URL在自己的页面上通过URL参数呈现(比如“slug”)。如果你在考虑SEO,事情也会变得复杂一些,因为你应该直接链接到不同的语言页面,而不是使用重定向等(传递链接)


希望能有所帮助。

谢谢!我认为这不是很好的语言转换方式…我从应用程序中获得$lng,但我还需要获得slug。。。你是怎么转换语言的?谢谢!我找到了插件,但它工作不好(doctrinecultureflagslugin)好的,试试看)
mysite.com/change-language/fr/ (?lang=fr)
mysite.com/change-language/de/ (?lang=de)
mysite.com/change-language/es/ (?lang=es)