我有一个像往常一样设置动作的页面,但是当我使用这个页面作为主页(url段是'home')时,动作(例如http:// {BaseHref}/someaction)返回404.如何做我让SilverStripe识别主页操作?
class MyPage_Controller extends Page_Controller {
private static $allowed_actions = array('someaction');
public function someaction() {
die('never get here');
}
}
Run Code Online (Sandbox Code Playgroud)
在SilverStripe中,页面上的操作路由始终以相同的方式工作:
$baseURL/$URLSegment/Action
Run Code Online (Sandbox Code Playgroud)
这意味着如果你这样做/someaction
将不会寻找一个动作,而是寻找一个URLSegment为的Page someaction
.
因此,如果您想在主页上调用操作,则必须包含URLSegment.
/home/someaction
但通常情况下,我强烈建议使用该$Link
方法.
$Link('someaction') // will output /home/someaction
// alternatively you can also do $Link/someaction
Run Code Online (Sandbox Code Playgroud)
还要注意:
$allowed_actions
缓存这样的私有静态变量,你必须刷新(访问/?flush=1
)才能让SilverStripe重新加载该缓存.$BaseHref
不推荐使用,请使用$baseURL
或$absoluteBaseURL
代替.