我正在尝试通过扩展名向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
提前致谢。
答案 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