Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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 SilverStripe Fluent-如何防止在自定义控制器上回退到querystring?_Php_Silverstripe - Fatal编程技术网

Php SilverStripe Fluent-如何防止在自定义控制器上回退到querystring?

Php SilverStripe Fluent-如何防止在自定义控制器上回退到querystring?,php,silverstripe,Php,Silverstripe,使用fluent的LocalMenu模板获取语言切换器会给我的自定义控制器和数据对象提供错误的链接,这些链接显示为页面 所以我两者都有。控制器显示为页面,其他自定义控制器上的数据对象显示为页面 我收到的不是en/sompage/foobar,而是somepage/foobar?l=en_US 我认为这是由于我在这些数据对象和控制器上错误地实现了Link函数造成的 我怎样才能纠正它?我找不到关于那个的任何东西。这是我当前的代码: public function Link($action = n

使用fluent的LocalMenu模板获取语言切换器会给我的自定义控制器和数据对象提供错误的链接,这些链接显示为页面

所以我两者都有。控制器显示为页面,其他自定义控制器上的数据对象显示为页面

我收到的不是en/sompage/foobar,而是somepage/foobar?l=en_US

我认为这是由于我在这些数据对象和控制器上错误地实现了Link函数造成的

我怎样才能纠正它?我找不到关于那个的任何东西。这是我当前的代码:

  public function Link($action = null) {
    $parent = MyParentPage::get()->first()->URLSegment;
    $home = RootURLController::get_default_homepage_link();

    if($parent != $home) {
      $url = $parent . '/';
    } else {
      $url = null;
    }

    return Director::baseURL() . $this->fluentUrlSegment() . $url . 'controller-segment';
  }

流畅配置

---
Name: projectfluentconfig
After: '#fluentconfig'
---
Fluent:
  disable_default_prefix: true
  detect_locale: true
  remember_locale: true
  default_locale: de_DE
  locales:
    - de_DE
    - en_US
  aliases:
    de_DE: de
    en_US: en
  field_exclude:
---
Name: projectfluentconfig
After: '#fluenti18nconfig'
---
i18n:
  default_locale: de_DE
使现代化 感谢wmk的回答,我可以改进我的链接功能。不幸的是,它仍然没有改变fluents区域设置菜单中链接的任何内容

而不是geschichte/。。和en/geschichte/。。我在德语网站上收到geschichte/。?l=de_de和geschichte/。?l=en_US,在英语网站上收到en/geschichte/。?l=de_de和en/geschichte/。?l=en_US

是否fluent完全忽略了这些链接函数?我还是犯了错误还是错过了什么?这是我的短端代码,&

有什么建议吗

更新2
FluentSiteTree类中的LocaleLink函数似乎是问题所在

您已经从数据库中获取了一个页面并获取了URLSecgment。为什么不利用该页面的链接方法呢?这应该已经有了流畅的素材集

然后用Controller::join_links连接链接部分


这不是一个真正的答案,而是一个解决办法

我通过将FluentExtension也添加到控制器中,并在该控制器上实现了我自己的LocaleLink函数,从而使其正常工作

对于其他困在这里的人,在找到真正的解决方案之前,这是我的工作代码,&

如果您不想为控制器使用已翻译的URL段,则可以使用此链接函数

  public function Link($action = null) {
    $homepage = Page::get()->find('URLSegment', RootURLController::get_homepage_link());
    $parent = $homepage->Link();

    $urlByLocale = [
      'de_DE' => 'geschichte',
      'en_US' => 'story',
    ];

    return Controller::join_links($parent, $urlByLocale[Fluent::current_locale()], $action);
  }
然后像那样改变路线

  'de/geschichte//$URLSegment!' => [
    'Controller' => 'Story_Controller',
    'l' => 'de_DE'
  ],
  'en/story//$URLSegment!' => [
    'Controller' => 'Story_Controller',
    'l' => 'en_US'
  ],

如果有人能找到更好的方法来实现这一点,那就太好了。

英语是您的默认语言环境吗?你能分享你的配置吗?有一个从URLsit的德语中删除默认语言环境的设置。我编辑了我的问题并添加了配置您是否有用于数据对象的自定义控制器,或者它只是页面的子链接?@wmk custom controller扩展了页面控制器。上面的链接功能来自此controller@csy_dot_io该控制器是否与CMS中的页面相关?感谢您使链接创建变得更容易和更干净。不幸的是,它仍然没有改变fluents区域设置菜单中链接的任何内容。我已经更新了我的问题也许你有什么想法?
  public function Link($action = null) {
    $homepage = Page::get()->find('URLSegment', RootURLController::get_homepage_link());
    $parent = $homepage->Link();

    $urlByLocale = [
      'de_DE' => 'geschichte',
      'en_US' => 'story',
    ];

    return Controller::join_links($parent, $urlByLocale[Fluent::current_locale()], $action);
  }
  'de/geschichte//$URLSegment!' => [
    'Controller' => 'Story_Controller',
    'l' => 'de_DE'
  ],
  'en/story//$URLSegment!' => [
    'Controller' => 'Story_Controller',
    'l' => 'en_US'
  ],