我一直在使用DI概念,但现在我开始使用依赖注入容器(DIC).虽然有一点我不清楚.
在我的DIC中,我保留(例如)Config对象和Request对象.我理解请求范围中的这些对象(每次从此容器请求时使用相同的实例)保持不变.但这只发生在我重新使用DIC的同一个实例时.
我应该如何通过我班级的DIC?假设我想在我的Router类中使用它,我是否需要在我的Router类的构造函数中传递它?但是Router类是在另一个类中创建的,那个类也应该已经有了这个DIC对象.
或者我应该创建这个DIC的单例?
我正在尝试在Doctrine中创建一个可选的OneToOne映射.
我有一个包含所有城市和邮政编码的表格(此表格不应更改),我有一张包含地址和映射城市的表格.但有时候我不想在开始时将城市添加到我的地址(可能稍后就会).但是当我没有向地址添加城市时,地址上的持久性会给我一个反射异常,因为没有像'null'这样的对象,它应该是de City对象.
我不希望每次都将空城添加到数据库中,因为不应该向城市表添加或删除任何内容.
有什么建议?或者我错过了什么?
class Address{
/**
* @OneToOne(targetEntity="City")
* @JoinColumn(name="city_id", referencedColumnName="id")
*/
private $city = '';
Run Code Online (Sandbox Code Playgroud)
我考虑的可能解决方案
我正在构建一个复杂的文件上传表单.此表单包含普通数据和一组4种文件类型,每种类型可能有多个文件上载.
UploadedFile实体有文件名,描述等.
使用案例:现在,我正在提交包含4张照片和2份报告的表单,所有6个文件都可以.但是表单中还有一些其他错误.但我想再次显示上传的文件,以便用户不必再次重新上载它们.这些文件已经保留,因此当我使用GET返回同一页面时,文件会正确显示.
我已经做过/尝试过的事情:
这一切都很好,但是因为我在绑定之后更改了我的报告和附件,所以在帖子之后显示的数据无法更改.我无法在提交的表单上执行setData($ report).
因此,现有文件不再显示,因为表单数据仍然是旧的报表对象(来自帖子).
当我执行页面的正常GET时,将从数据库中检索$ report并正确显示.但是在已经上传文件的POST之后,数据库数据是正确的,但是表单视图不知道有关已更改数据的任何信息(在绑定之后).
有任何想法吗?或者更好的方法吗?
我在PHP中创建了一个个人轻量级框架,它符合我对框架的需求.我正在使用不同的第三方库,如SwiftMailer,Twig,Assetic,Facebook PHP api,......
您如何从第三方库管理这些源代码?你是否将它作为一个子模块添加到你的项目中,只需拉动以获得最新版本?或者您只是将代码复制到项目目录中并自行进行更新?
大多数代码存储库的结构如下:
所以在我的框架目录中它看起来像这样,我们供应商dirs作为远程项目的子模块:
这是要走的路吗?或者您如何建议这样做?在capistrano部署期间,将从远程服务器中提取所有子模块存储库.
编辑:我必须说我在其他项目中使用框架作为子模块.所以框架是项目中的子模块,框架本身也有子模块.
谢谢!