【问题标题】:Not working locale on route as parameter在路由上不工作的语言环境作为参数
【发布时间】:2018-06-02 19:52:32
【问题描述】:

我的路由有问题,当我尝试访问主页时,我得到了错误:

“没有找到“GET /”的路由

我的配置文件(app/config/config.yml):

parameters:
locale: en

framework:
#esi: ~
translator: { fallbacks: ['%locale%'] }
router:
    resource: '%kernel.project_dir%/app/config/routing.yml'
    strict_requirements: ~
default_locale: '%locale%'

我的路由文件(app/config/routing.yml)

web_client:
resource: "@DesktopBundle/Resources/config/routing_web.yml"
prefix: /{_locale}
defaults: { _locale: en}
requirements:
    _locale: en|fr

我的路由第二个文件(src/Resources/config/routing_web.yml)

home_page:
path: /
defaults: { _controller: DesktopBundle:Website/HomePage:homePage}

我的行动:

public function homePageAction(Request $request)
{
    return $this->render('DesktopBundle:Web:layout.html.twig', array());
}

当我尝试访问基本 url 时出现 404 错误。

【问题讨论】:

    标签: symfony routing symfony-2.1


    【解决方案1】:

    当然你会遇到 404 错误,AFAIU 你用 _locale 为你的路由添加前缀,然后用 home_page 数据读取你的资源文件,所以路由将类似于这个:

    example.com/en/

    进入example.com后要获取homePageAction,需要将routing.yml中homepage的路由移动到web_client上面。

    编辑: 要重定向阅读此doc 你需要这样的东西:

    home_page:
        pattern: /
        defaults:
            _controller: FrameworkBundle:Redirect:urlRedirect
            path: /en
            permanent: true
    
    web_client:
        resource: "@DesktopBundle/Resources/config/routing_web.yml"
        prefix: /{_locale}
        defaults: { _locale: en}
        requirements:
            _locale: en|fr
    

    【讨论】:

    • 抱歉,没明白...我希望默认语言环境为“en”,如果我将 example.com 写入重定向到 example.com/en
    • 如果我想添加一条新路由,例如:/contact...我需要同时创建:routing.yml 和 routing_web.yml?
    • 对于 example.com/en/contact 和 example.com/fr/contact,您只需在 routing_web.yml 中添加 /contact,因为此文件仅适用于以 /{locale}/ (正如您在 _webclient 部分中指定的那样),因此没有语言环境将导致 404 错误
    猜你喜欢
    • 2020-03-29
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多