我之前在两种环境中都在本地计算机和目标主机上测试了Symfony的Web应用程序:prod和dev - 两者都运行良好.所以我在我的本地计算机上完成了一英里的石头,仍然只在dev上测试.一切正常.然而 - Doctrine似乎现在还没有开始生产 - 我不知道为什么以及它如何停止工作.
这就是我所看到的 - 这段代码(来自DefaultController.php)正在研究prod和dev:
$tags = $this->getDoctrine()
->getRepository("MyWebBundle:Tag");
Run Code Online (Sandbox Code Playgroud)
但是这个(一行更多)仅适用于dev,但不是prod:
$tags = $this->getDoctrine()
->getRepository("MyWebBundle:Tag")
->find(1);
Run Code Online (Sandbox Code Playgroud)
在prod中,最后一行导致网页"死亡".毫无疑问发生了错误,但我在日志中没有任何消息,当然在prod env中Symfony是沉默的.我不知道如何处理这个问题......最奇怪的是,prod工作得恰到好处.
更新:好的,我追踪了代码的一部分,这有助于工作和不工作(但在生产中,在开发中始终有效).数据库中存在一些关系(Tag Many-to-One to Category).以下是Entity/Tag.php中的这部分代码:
/**
* @ORM\ManyToOne(targetEntity="Category")
* @ORM\JoinColumn(name="id_category", referencedColumnName="id_category", nullable=true)
*/
protected $category;
Run Code Online (Sandbox Code Playgroud)
有趣的是Symfony2并不详细...当我从Tag.php中删除它时,我的webapp工作正常.如果我重新输入这个文件,它不会...
更新:经过进一步的研究,我可以看到实际上所有的关系都是有问题的(刺激,而不是开发).我以上述方式为数据库编写了额外的"人工"(用于测试目的)查询,并且都给出了两种效果之一: 当表位于层次依赖之上时,一切正常(让我们称之为A类型) *当表时有关系,Symfony只是停止工作,没有任何消息(让我们称之为B型...*
我还尝试用空表进行测试并完成测试."B型"表中有两种情况: 当为空时,它有效 *存储数据时(有关系),它不起作用*
我正在使用Symfony2,在从我所付费用的主机的服务器上可以看到耗尽内存的错误。是否可以在不编辑php.ini的情况下设置新限制(不可访问)?
有没有办法在接口中指示可选方法(以便合同只显示要给出的参数的数量/类型)?
请给出更多的理解和洞察力,并指出解决方案?例如,请参阅此讨论:Java接口中的可选方法
在应用程序中,我使用连接到持久性(Doctrine)的Listeners.所以我正在使用其中一些方法:
prePersist()
preUpdate()
postPersist()
postUpdate()
Run Code Online (Sandbox Code Playgroud)
等等
现在,在重构时,由于实体太多(要保留的对象),我决定将这些方法的各个部分拆分为不同的类.
然而,并非所有这些都需要所有pre -...和post -...方法.我需要确保给出适当数量和类型的参数.你是如何用PHP做到的?
我有以下事实:
make(product_A, product_Z, product_Y).
make(P, X, Y) :- make(P, Y, X).
Run Code Online (Sandbox Code Playgroud)
我想确保产生product_A的半成品(即product_Z和product_Y)无论其在查询中的位置如何都是正确的.
所以我想要这个查询:
make(product_A, product_Y, product_Z).
Run Code Online (Sandbox Code Playgroud)
还有这个:
make(product_A, product_Z, product_Y).
Run Code Online (Sandbox Code Playgroud)
应该被Prolog视为等价物(相同) - 即使我没有将这两个案例作为事实放入Prolog的数据库中.换句话说,我想让参数(product_Z和product_Y)在查询中可以交换.
但是当我把代码放在开头时,Prolog似乎重复了一个无限循环.
那我该怎么做呢?