鉴于:
我已经创建Hash
和Captcha
类。Hash
创建表单标记。Captcha
使用Graphics
类来创建图像。自定义会话服务包装类用于处理$_SESSION
超全局数据结构。
设想:
我使用依赖注入容器。因此,我想知道在哪里定义可公开访问的 HTML 表单的实例化Captcha
和实例化。Hash
假设 1:您应该注入一个子节点,Hash
因为需要访问来存储(根据 HTTP 请求)和验证(根据 HTTP 响应)CSRF 令牌和 CAPTCHA 答案。视图不应该访问会话数据结构。Captcha
Model
$_SESSION
假设 2:您应该注入Hash
和Captcha
的子代,View
因为生成 CSRF 令牌和验证码实际上是 View表示逻辑的一部分,即使它们的验证发生在Model
. View
允许从 a 直接或间接访问会话数据结构。
第一个假设似乎是答案,但我想确定一下。
摘要示例:
$session = new Session(); // A custom wrapper class
$hash = new Hash();
$graphics = new Graphics();
$captcha = new Captcha($graphics);
$model = new ContactModel($session, $hash, $captcha);
或者
$view = new ContactView($session, $hash, $captcha);