【问题标题】:Why have this Filter here? Should it be in the controller?为什么这里有这个过滤器?它应该在控制器中吗?
【发布时间】:2011-01-22 23:08:40
【问题描述】:

我看到了这段代码。我删除了一些不相关的代码以使其更简单(例如检查密码是否匹配的相同验证器)。

$password = new Zend_Form_Element_Password('password');
$password->addFilter(new My_Filters_Sha());

$password2 = new Zend_Form_Element_Password('password2');
$password2->addFilter(new My_Filters_Sha());

我的问题是关于过滤器的。我的猜测是,编写它的人将密码作为哈希值保存在数据库中,这就是他们使用过滤器对密码进行哈希处理的原因。但是让过滤器处理散列有什么意义呢?创建帐户时,不应该在控制器中完成一次吗?收到输入后,将其处理为哈希并保存。将其用作过滤器有什么意义吗?

【问题讨论】:

    标签: php zend-framework


    【解决方案1】:

    控制器的职责是处理请求并委托给适当的模型。散列密码是业务逻辑。业务逻辑在控制器中没有位置,但属于模型。您的 Form 类是一个 Model 类,因此将过滤器放在那里是合适的。

    【讨论】:

    • 这是我第一次将表单视为模型类。因此,假设在注册时我还会检查用户名是否可用。你是说我也应该把这张支票放在表格里?不在控制器中?
    • 我现在要做的是确保所有必填字段都在那里。然后我在控制器中处理哈希和用户可用性以及所有这些。
    • @samquo 嗯,Zend 表单……很难定义。 ZF 的 Matthew Weier O'Phinney 在weierophinney.net/matthew/archives/… 上发表了一篇有趣的博客文章。检查用户名是否可用绝对属于模型。它在控制器中没有位置。你把模型放在哪里取决于你,但不要把它放在控制器中。你的控制器应该很薄,你的模型应该很胖。见stackoverflow.com/questions/3109715/…
    猜你喜欢
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 2019-01-09
    • 2015-02-21
    相关资源
    最近更新 更多