【发布时间】:2014-03-19 15:28:07
【问题描述】:
我目前正在使用 Symfony2 进行一个项目,遇到了一个我无法找到答案的情况。
我创建了一个用于验证和上传文件的模型。我最初实例化模型的方式是在我的控制器中执行类似的操作。
$constraints = array('maxSize'=>'1M','mimeTypes' => array('application/pdf','application/x-pdf'));
$uploadFiles = new UploadModel($this->get('validator'), $request, $editForm->getName(), 'filePaths', $constraints);
但是,这看起来不像“Symfony”,因为它有一个完整的服务层。事实上,在我运行 SensioLabs Insight 工具后,它建议我不要直接将验证器和请求服务直接传递给模型,而是将它们注入到服务中。所以现在我的文件看起来像这样。
services.yml
(AE/CaseDesignBundle/Resources/config/services.yml)
ae_case_design.uploadmodel:
class: AE\CaseDesignBundle\Models\UploadModel
arguments: [ @validator, @request_stack ]
上传模型.php
(AE/CaseDesignBundle/Models/UploadModel.php)
public function __construct($validator, $requestStack, $formName, $fileInput, $constraints = null)
{
}
CarrierController.php
(AE/CaseDesignBundle/Controller/CarrierController.php)
$constraints = array('maxSize'=>'1M','mimeTypes' => array('application/pdf','application/x-pdf'));
$uploadFiles = $this->get('ae_case_design.uploadmodel');
我现在的问题是如何将剩余的 3 个参数(2 个字符串和 1 个数组)传递给 UploadModel __construct? 我已经看到了一些其他示例,其中人们做了这样的事情:
$constraints = array('maxSize'=>'1M','mimeTypes' => array('application/pdf','application/x-pdf'));
$uploadFiles = $this->get('ae_case_design.uploadmodel')->init($editForm->getName(), 'filePaths', $constraints);
但对我来说,这是将非服务级别参数注入 __construct 的唯一方法似乎很奇怪,因为现在我必须在我的服务准备好使用之前运行一个 init() 函数。
【问题讨论】:
标签: php symfony dependency-injection