Php Symfony自动运行函数
我在Symfony中构建了一个登录系统。在每个安全页面上,我需要验证用户名是否与密码匹配。我在myUser.class.php中编写了一个函数:Php Symfony自动运行函数,php,symfony1,symfony-1.4,Php,Symfony1,Symfony 1.4,我在Symfony中构建了一个登录系统。在每个安全页面上,我需要验证用户名是否与密码匹配。我在myUser.class.php中编写了一个函数:isValidAuth()。然而,我需要在每一页的行动中写下以下几行: if(!isValidAuth()) { $this->forward('home', 'logout'); } 当您有多个安全的页面和模块时,这是非常不方便的。如果页面是安全的,有没有办法像函数一样运行这些行?就像在页面加载时访问executeIndex()时一样?
isValidAuth()
。然而,我需要在每一页的行动中写下以下几行:
if(!isValidAuth())
{
$this->forward('home', 'logout');
}
当您有多个安全的页面和模块时,这是非常不方便的。如果页面
是安全的
,有没有办法像函数一样运行这些行?就像在页面加载时访问executeIndex()
时一样?Symfony中有一个内置功能来处理这个问题。Manual适用于1.2版,但也适用于1.4版:
由于1.4中的配置值已更改为true/false而不是on/off,因此您必须更改它们:
apps/frontend/modules/mymodule/config/security.yml
all:
is_secure: true # for all actions of a module
foo:
is_secure: false # action foo is public
在apps/frontend/config/settings.yml中,您必须提供一个模块和操作来进行登录等操作
all:
.actions:
login_module: default
login_action: login
secure_module: default
secure_action: secure
最后但并非最不重要的一点是,您需要在用户上设置Authenticated标志(通常在登录之后;):
顺便说一下。也许您应该安装sfdoctrineguardplugin,它提供了用户处理、登录等开箱即用的功能;) 最好的地方是filterchain,我甚至建议扩展sfBasicSecurityFilter。要启用扩展类,请编辑apps/myapp/config/filters.yml
rendering: ~
security:
class: myExtendedSecurityFilter
# Generally, you will want to insert your own filters here
cache: ~
execution: ~
除了扩展sfBasicSecurityFilter,还可以创建一个扩展sfFilter的新类。请在此处阅读有关筛选器的更多信息:
除了我之外,请回答。还有一些其他方法可以实现这种“自动运行”功能。例如,您可以使用自定义构造函数扩展sfAction,或者使用
preExecute()
和postExecute()
函数,这些函数将在每次调用模块的操作时执行
rendering: ~
security:
class: myExtendedSecurityFilter
# Generally, you will want to insert your own filters here
cache: ~
execution: ~