Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony自动运行函数_Php_Symfony1_Symfony 1.4 - Fatal编程技术网

Php Symfony自动运行函数

Php Symfony自动运行函数,php,symfony1,symfony-1.4,Php,Symfony1,Symfony 1.4,我在Symfony中构建了一个登录系统。在每个安全页面上,我需要验证用户名是否与密码匹配。我在myUser.class.php中编写了一个函数:isValidAuth()。然而,我需要在每一页的行动中写下以下几行: if(!isValidAuth()) { $this->forward('home', 'logout'); } 当您有多个安全的页面和模块时,这是非常不方便的。如果页面是安全的,有没有办法像函数一样运行这些行?就像在页面加载时访问executeIndex()时一样?

我在Symfony中构建了一个登录系统。在每个安全页面上,我需要验证用户名是否与密码匹配。我在myUser.class.php中编写了一个函数:
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: ~