Silverstripe 扩展控制器操作
Silverstripe Extending Controller Actions
我正在尝试通过扩展程序向 Page_Controller class 添加控制器操作。
例如,期望的结果是能够转到 www.mysite.com/setlanguage/spanish
并通过浏览器 cookie 将网站的语言更新为西班牙语。
但是我对 SilverStripe 中的扩展不熟悉,到目前为止,当我访问 link 控制器操作时,我得到的只是 404 错误。
请看我的代码...
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();
}
}
我正在使用 YML 配置文件调用扩展程序:
Page_Controller:
extensions:
- Page_ControllerLanguageExtension
提前致谢。
因此,如果您需要 /setlanguage/<language>
作为 url,则必须将 url /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
,cause action index是默认允许的。
现在,在您的 /mysite/_config/routes.yml 中,您必须定义到控制器的路由:
---
Name: mysite-routes
After: framework/routes#coreroutes
---
Director:
rules:
'setlanguage/$Language': 'SetLanguageController'
另请参阅:Docs for routing
我正在尝试通过扩展程序向 Page_Controller class 添加控制器操作。
例如,期望的结果是能够转到 www.mysite.com/setlanguage/spanish
并通过浏览器 cookie 将网站的语言更新为西班牙语。
但是我对 SilverStripe 中的扩展不熟悉,到目前为止,当我访问 link 控制器操作时,我得到的只是 404 错误。
请看我的代码...
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();
}
}
我正在使用 YML 配置文件调用扩展程序:
Page_Controller:
extensions:
- Page_ControllerLanguageExtension
提前致谢。
因此,如果您需要 /setlanguage/<language>
作为 url,则必须将 url /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
,cause action index是默认允许的。
现在,在您的 /mysite/_config/routes.yml 中,您必须定义到控制器的路由:
---
Name: mysite-routes
After: framework/routes#coreroutes
---
Director:
rules:
'setlanguage/$Language': 'SetLanguageController'
另请参阅:Docs for routing