Silverstripe扩展控制器操作

时间:2015-07-12 15:22:07

标签: php model-view-controller silverstripe

我正在尝试通过扩展名向Page_Controller类添加一个Controller Action。

所需的结果是能够转到class Page_ControllerLanguageExtension extends Extension { private static $allowed_actions = array( 'setLanguage' ); public function setLanguage(SS_HTTPRequest $request) { $requestedLanguage = $request->param('ID'); $languageCookie = new Cookie; $languageCookie->set('site_language', $requestedLanguage); return $this->owner->RedirectBack(); } } ,并通过浏览器cookie将网站的语言更新为西班牙语。

但是我对SilverStripe中的Extensions失败了,到目前为止,当我访问控制器操作的链接时,我得到的是404错误。

请查看我的代码......

Page_Controller:
  extensions:
    - Page_ControllerLanguageExtension

我正在使用YML配置文件调用扩展名:

numbers = [1, 7, 2, 34, 8, 7, 2, 5, 14, 22, 93, 48, 76, 15, 7]

_numbers = numbers[::-1]

for i, index in enumerate(_numbers):
    if i % 2 != 0:
        del(_numbers[index])
    break
print _numbers

提前致谢。

1 个答案:

答案 0 :(得分:1)

因此,如果您需要/setlanguage/<language>作为网址,则必须将网址/setlanguage/路由到单独的控制器:

class SetLanguageController extends Controller {

    public function index(SS_HTTPRequest $request) {

        $requestedLanguage = $request->param('Language'); //as defined in config below
        $languageCookie = new Cookie;
        $languageCookie->set('site_language', $requestedLanguage);

        return $this->RedirectBack();

    }
}

在这种情况下我们不需要定义$allowed_actions,因此默认情况下允许操作索引。

现在在 /mysite/_config/routes.yml 中,您必须定义到控制器的路由:

---
Name: mysite-routes
After: framework/routes#coreroutes
---

Director:
  rules:
    'setlanguage/$Language': 'SetLanguageController'

另请参阅:Docs for routing