我正在开发一个在SilverStripe中构建的新网站。目前,我在尝试让系统更改安全控制器登录(并最终注销)功能的URL别名(或创建第二个)时遇到了很多麻烦。
我尝试过使用routes.yml文件,我尝试在自己的UserController中创建路径,并使用“return Security :: login()”直接从安全控制器加载。但这给了我关于使用静态函数的错误。
不幸的是,我并非来自大量的面向对象体验,这是我使用过的第一个实际上使用了一堆真正的面向对象的CMS。我们使用的SilverStripe的当前版本是3.0(但我们将在几天内升级到3.1.1)。
有没有人对SilverStripe中的路由了解多少?
答案 0 :(得分:2)
SilverStripe有路由,可以在yaml配置文件中定义它们。
如果您查看框架中的现有routes.yml
,您可以看到如何定义默认安全路由:
https://github.com/silverstripe/silverstripe-framework/blob/fd6a1619cb7696d0f7e3ab344bc5ac7d9f6cfe77/_config/routes.yml#L17
如果您只想替换Secuirty
中的Secuirty/login
,只需使用以下内容在routes.yml
中创建自己的mysite/_config/
即可:
---
Name: myroutesorsomeotherrandomname
Before: '*'
After:
- '#rootroutes'
- '#coreroutes'
- '#modelascontrollerroutes'
- '#adminroutes'
---
Director:
rules:
'foobar//$Action/$ID/$OtherID': 'Security'
注意:确保运行了?flush = 1以确保加载了yml文件(它们被缓存)
还要确保在yml文件中使用空格,如果使用制表符,则会产生不良时间
如果您希望同时替换/login
和/logout
,则不再需要进行路由。
登录和注销是安全性上的操作(在Security :: $ allowed_actions中列出的php函数,因此可用作URL)。
但它仍然相当容易,只是子类安全并创建你想要的动作:
<?php
class MySuperSecurity extends Security {
private static $allowed_actions = array(
'showMeTheLoginForm',
'alternative_login_action_with_dashes',
'doTheLogout',
);
function showMeTheLoginForm() {
// can be visited via http://website.com/foobar/showMeTheLoginForm
return $this->login();
}
function alternative_login_action_with_dashes() {
// can be visited via http://website.com/foobar/alternative-login-action-with-dashes
return $this->login();
}
function doTheLogout($redirect = true) {
// can be visited via http://website.com/foobar/doTheLogout
return $this->logout($redirect);
}
}
并使路线指向routes.yml
'foobar//$Action/$ID/$OtherID': 'MySuperSecurity'
注意:再次确保您执行了?flush = 1,private static $allowed_actions
以及yml配置文件都被silverstripe缓存。
注意:本文中建议的两种解决方案都会创建一条额外的登录路线,而不会替换现有路线,因此旧的Security/login
仍可用
答案 1 :(得分:1)
除了CMS之外,我对SilverStripe一无所知,但我认为SilverStripe必须提供一种别名Url的方法。如果您正在使用apache或在.htaccess文件中,另外一种方法是在虚拟主机定义中创建别名。有关详细信息,请参阅apache doc。如果您发布.htaccess文件或VirtualHost定义的骨架,我可以帮助您。