如何将SilverStripe中的安全性/登录URL别名更改为用户/登录

时间:2013-11-08 16:24:22

标签: php oop routing url-routing silverstripe

我正在开发一个在SilverStripe中构建的新网站。目前,我在尝试让系统更改安全控制器登录(并最终注销)功能的URL别名(或创建第二个)时遇到了很多麻烦。

我尝试过使用routes.yml文件,我尝试在自己的UserController中创建路径,并使用“return Security :: login()”直接从安全控制器加载。但这给了我关于使用静态函数的错误。

不幸的是,我并非来自大量的面向对象体验,这是我使用过的第一个实际上使用了一堆真正的面向对象的CMS。我们使用的SilverStripe的当前版本是3.0(但我们将在几天内升级到3.1.1)。

有没有人对SilverStripe中的路由了解多少?

2 个答案:

答案 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定义的骨架,我可以帮助您。