Symfony 2 Service 如何将我自己的数据馈送到我的服务中


Symfony 2 Service How To Feed My Own Data Into My Service?

好的,我已经在通行证中设置了一些服务,但并不多,所以我对它们的了解是有限的。

我已经这样设置了,

upload:
    class: MyBundle'Classes'Upload
    arguments: [@doctrine.orm.entity_manager, %FormData]

所以我尝试设置自己的类来上传我的文件数据。我正在这样做,有许多控制器需要上传数据。我也尝试使用,@FormData$FormData,但仍然没有将我的表单数据传递到我的服务中?

表单数据的设置如下:

// getting just the file non mapped, form element
$FormData = $form->get('file')->getData();

这就是我在控制器中所说的,

$this->get('upload', $FormData)

但是FormData似乎总是只是转储变量名称,而不是将数据传递到我的类中。

所以我的Upload类是这样设置的:

class Upload
{
    private $Data;
    public function __construct(EntityManager $em, $Data) {
        $this->em = $em;
        $this->data = $Data; <-*Note 1
    }
    public function UploadFile() {
        // ...do something and save path/data into File Entity...
    }
} 

是的,我正在将"实体管理器"命名空间加载到我的类中......

那么,为什么我的$this->data不包含传递给它的表单数据呢?

注1:这是我正在做的var_dump(),它只是显示$FormData@FormData

所有帮助最受欢迎...

谢谢。


更新

我的想法是把它设置为一个普通的班级,

$UploadData = new Upload($Data, $em);
然后

传入我的数据,然后传递$em?

这是设置这个的最佳原因吗?

谢谢

你真的很接近。 您创建的服务背后的想法是它是可重用的 - 因此您不希望直接在服务的构造函数中注入单个表单的数据。 您唯一想要注入的是您可能需要的任何其他服务 - 在本例中为 Doctrine 实体管理器。

该服务是在执行任何控制器代码之前创建的,因此无论如何都无法将表单数据传递给构造函数。 Symfony使用依赖注入来为你完成所有繁重的工作,传递Doctrine实体管理器,这样你就不必像你尝试的那样手动这样做。 因此,您的服务定义将被简化:

upload:
    class: MyBundle'Classes'Upload
    arguments: ["@doctrine.orm.entity_manager"]

您的服务也得到了简化:

use Doctrine'Orm'EntityManager;
class Upload
{
    private $em;
    public function __construct(EntityManager $em) {
        $this->em = $em;
    }
}

现在,您可以选择为表单数据创建资源库,但最好将其传递给服务中的uploadFile()函数,如下所示:

class Upload
{
    public function uploadFile($formData)
    {
        // do something with the form data here
    }
}

然后,您只需在控制器中执行以下操作:

$this->container->get('upload')->uploadFile($form->get('file')->getData());