小编jay*_*ayv的帖子

如何保留依赖注入容器(PHP)的实例

我一直在使用DI概念,但现在我开始使用依赖注入容器(DIC).虽然有一点我不清楚.

在我的DIC中,我保留(例如)Config对象和Request对象.我理解请求范围中的这些对象(每次从此容器请求时使用相同的实例)保持不变.但这只发生在我重新使用DIC的同一个实例时.

我应该如何通过我班级的DIC?假设我想在我的Router类中使用它,我是否需要在我的Router类的构造函数中传递它?但是Router类是在另一个类中创建的,那个类也应该已经有了这个DIC对象.

或者我应该创建这个DIC的单例?

php design-patterns dependency-injection

10
推荐指数
1
解决办法
591
查看次数

Doctrine可选的OneToOne映射

我正在尝试在Doctrine中创建一个可选的OneToOne映射.

我有一个包含所有城市和邮政编码的表格(此表格不应更改),我有一张包含地址和映射城市的表格.但有时候我不想在开始时将城市添加到我的地址(可能稍后就会).但是当我没有向地址添加城市时,地址上的持久性会给我一个反射异常,因为没有像'null'这样的对象,它应该是de City对象.

我不希望每次都将空城添加到数据库中,因为不应该向城市表添加或删除任何内容.

有什么建议?或者我错过了什么?

class Address{
/**
 * @OneToOne(targetEntity="City")
 * @JoinColumn(name="city_id", referencedColumnName="id")
 */
  private $city = '';
Run Code Online (Sandbox Code Playgroud)

我考虑的可能解决方案

  • 在db中创建一个空的城市对象,并将其始终分配给新创建的Address对象(可能会导致大量开销)
  • 与一组城市创建一个ManyToMany关系,因此可以添加零个或多个城市(我可以限制我的Address对象中的众多城市)但是我需要一个映射表...

mapping orm doctrine one-to-one

7
推荐指数
1
解决办法
5187
查看次数

Symfony2表单:表单无效时显示已上载的文件

我正在构建一个复杂的文件上传表单.此表单包含普通数据和一组4种文件类型,每种类型可能有多个文件上载.

  • ReportForm
    • 附件
      • 报告(UploadedFile实体的集合)
      • 照片(UploadedFile实体的集合)

UploadedFile实体有文件名,描述等.

使用案例:现在,我正在提交包含4张照片和2份报告的表单,所有6个文件都可以.但是表单中还有一些其他错误.我想再次显示上传的文件,以便用户不必再次重新上载它们.这些文件已经保留,因此当我使用GET返回同一页面时,文件会正确显示.

我已经做过/尝试过的事情:

  • 在绑定请求之前,我克隆了现有的上传文件
  • 绑定表单后,我上传所有新文件(如果有的话)并保留它们
  • 之后,我重新添加现有的上传文件(来自克隆对象).我创建了具有现有文件ID的表单输入,因此我可以识别现有项目.

这一切都很好,但是因为我在绑定之后更改了我的报告和附件,所以在帖子之后显示的数据无法更改.我无法在提交的表单上执行setData($ report).

因此,现有文件不再显示,因为表单数据仍然是旧的报表对象(来自帖子).

当我执行页面的正常GET时,将从数据库中检索$ report并正确显示.但是在已经上传文件的POST之后,数据库数据是正确的,但是表单视图不知道有关已更改数据的任何信息(在绑定之后).

有任何想法吗?或者更好的方法吗?

php forms file-upload symfony

7
推荐指数
1
解决办法
1703
查看次数

你如何在项目中管理第三人称git存储库?(例如Twig/Assetic/..)

我在PHP中创建了一个个人轻量级框架,它符合我对框架的需求.我正在使用不同的第三方库,如SwiftMailer,Twig,Assetic,Facebook PHP api,......

您如何从第三方库管理这些源代码?你是否将它作为一个子模块添加到你的项目中,只需拉动以获得最新版本?或者您只是将代码复制到项目目录中并自行进行更新?

大多数代码存储库的结构如下:

  • 文档
  • SRC
  • 测试

所以在我的框架目录中它看起来像这样,我们供应商dirs作为远程项目的子模块:

  • 文档
  • SRC
    • 供应商
      • Assetic(远程回购的克隆)
      • SRC
      • ...
  • 测试

这是要走的路吗?或者您如何建议这样做?在capistrano部署期间,将从远程服务器中提取所有子模块存储库.

编辑:我必须说我在其他项目中使用框架作为子模块.所以框架是项目中的子模块,框架本身也有子模块.

谢谢!

git directory project-management project data-structures

6
推荐指数
1
解决办法
131
查看次数