什么是最简单的方法来获得两个PHP之间的天数差异DateTimes,考虑午夜作为一天的变化(就像DATEDIFF(DAY)SQL函数一样)?
例如,在今天的13:00和明天的12:00之间,我应该得到1(天),即使间隔小于24小时.
$date1 = new DateTime("2013-08-07 13:00:00");
$date2 = new DateTime("2013-08-08 12:00:00");
echo $date1->diff($date2)->days; // 0
Run Code Online (Sandbox Code Playgroud) 默认情况下,ManyToManyDoctrine 下的自引用关系涉及拥有方和反方,如文档中所述.
有没有办法实现双方之间没有差异的互惠协会?
按照文档中的示例:
<?php
/** @Entity **/
class User
{
// ...
/**
* @ManyToMany(targetEntity="User")
**/
private $friends;
public function __construct() {
$this->friends = new \Doctrine\Common\Collections\ArrayCollection();
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
因此,加入entity1到entity2小号friends 意味着entity2会在entity1朋友.
由于我不清楚openssl命令的论点,每当我需要创建自签名证书(用于测试环境)时,我习惯于引用相同的SO答案.该命令如下所示:
openssl req -x509 -nodes -newkey rsa:2048 -keyout mysite.key -out mysite.crt -days 365
Run Code Online (Sandbox Code Playgroud)
它通常可以工作,例如我目前的Ubuntu 15.10.今天我正在全新安装Debian Jessie但事实并非如此.Apache在启动时警告:
[ssl:warn] [pid 1040] AH01906: www.mysite.com:443:0 server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
Run Code Online (Sandbox Code Playgroud)
我寻找问题的解决方案,并在linux论坛中找到答案,说明应该使用以下内容:
openssl genrsa -des3 -passout pass:x -out mysite.pass.key 2048
openssl rsa -passin pass:x -in mysite.pass.key -out mysite.key
openssl req -new -key mysite.key -out mysite.csr
openssl x509 -req -days 365 -in mysite.csr -signkey mysite.key -out mysite.crt
Run Code Online (Sandbox Code Playgroud)
这是真的,这样Apache警告消失了.
据我所知,这会创建一个受密码保护的密钥,然后删除密码,然后创建一个CSR,然后生成包含CSR和密钥的证书.
所以问题是:这个较长的版本做的是什么,短版本没有,为什么在某些情况下(如今对我来说)是必要的?
假设我有两个Doctrine实体,Person并且Company.两者都有一个address接受地址值对象的字段.根据业务规则,Company::Address必需时Person::Address可以为null.
Doctrine 2.5提出了Embeddable类型,它显然是以值对象为基础构建的,实际上,我认为它是我案例的完美解决方案.
但是,有一件事我不能做:声明可以Person::Address为空而Company::Address不是.nullableEmbeddable的字段本身存在布尔属性,但当然这适用于嵌入地址的每个实体.
有人知道我是否遗漏了某些东西,或者这是否是由于技术限制,是否有解决方法等?现在,我看到的唯一解决方案是将所有Embeddable字段声明为nullable: true并在我的代码中处理约束.
看起来好像我的Dockerfile使用ENTRYPOINT脚本时,它的基本图像CMD被忽略了.任何人都可以告诉我为什么和/或文档在哪里解释这种行为?
下面是一个Dockerfile扩展官方php:7.0-fpm图像(使用CMD ["php-fpm"])的示例.在入口点脚本中,我希望$@变量包含字符串,php-fpm但它是空的.
marc@imac-marc:/opt/php-docker$ cat Dockerfile-php
FROM php:7.0-fpm
COPY utils/entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/entrypoint.sh
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
marc@imac-marc:/opt/php-docker$ cat utils/entrypoint.sh
#!/usr/bin/env bash
echo "CMD = $@"
marc@imac-marc:/opt/php-docker$ docker build -t me:myImage -f Dockerfile-php .
Sending build context to Docker daemon 276 kB
Step 1 : FROM php:7.0-fpm
---> d66add11c05d
Step 2 : COPY utils/entrypoint.sh /usr/local/bin/
---> a62ef60a202b
Removing intermediate container 20bd7782844e
Step 3 : RUN chmod +x /usr/local/bin/entrypoint.sh
---> Running …Run Code Online (Sandbox Code Playgroud) 如果我理解正确,SymfonyRequirements.php文件(生活在Symfony版本下/app或/var依赖于Symfony版本)由Composer处理.因此,我认为任何版本控制系统都不应该跟踪它.但是,我发现它被排除在Symfony Standard Edition的.gitignore文件之外:
/var/*
[...]
!var/SymfonyRequirements.php
Run Code Online (Sandbox Code Playgroud)
Symfony核心开发人员@Stof在Github问题中说:
鉴于其中一项检查是您是否安装了供应商,它必须在安装之前就已存在(即使我们已自动更新要求,以便您下次检查最新版本).
这对我来说不是很清楚.任何人都可以提供有关此文件的更多详细信息,并解释为什么VCS应该或不应该跟踪它?
在Doctrine存储库类中,以下代码产生以下结果:
$rsm = new ResultSetMapping;
$rsm->addEntityResult($this->_entityName, 'g');
$rsm->addFieldResult('g', 'geonameid', 'id');
$nativeQuery = $this->_em->createNativeQuery(
"SELECT g.geonameid FROM mydb.geoname g WHERE g.geonameid = 2998268",
$rsm
);
$r = $nativeQuery->getResult();
Debug::dump($r);
Run Code Online (Sandbox Code Playgroud)
结果:
array(1) {
[0]=>
object(stdClass)#461 (20) {
["__CLASS__"]=>
string(40) "My\Bundle\Entity\Geonames\Geoname"
["id"]=>
int(2998268)
["name"]=>
NULL
["asciiname"]=>
NULL
["latitude"]=>
NULL
["longitude"]=>
NULL
["fclass"]=>
NULL
["fcode"]=>
NULL
["countryCode"]=>
NULL
["cc2"]=>
NULL
["admin1Code"]=>
NULL
["admin2Code"]=>
NULL
["admin3Code"]=>
NULL
["admin4Code"]=>
NULL
["population"]=>
NULL
["elevation"]=>
NULL
["gtopo30"]=>
NULL
["timezone"]=>
NULL
["moddate"]=>
NULL
}
}
Run Code Online (Sandbox Code Playgroud)
这个(几乎)空的对象是正确的结果。这是我期望得到的。但是,如果我在代码前加上$test = $this->find(2998268); …
我最近将我的Symfony项目升级到2.8版,然后采用了Symfony 3目录结构.现在,当我运行Codeception时,它给出了以下错误消息:
Acme\SiteBundle\Entity\Acme\User类中的注释"@Doctrine\ORM\Mapping\Entity"不存在,或者无法自动加载."
所以Doctrine注释不是自动加载的.我知道Symfony 3在自动加载方面做了一些改动.这对Codeception有什么影响,需要调整哪些才能使它正常工作?
doctrine ×3
doctrine-orm ×3
php ×3
symfony ×3
apache ×1
caching ×1
codeception ×1
date ×1
dateinterval ×1
datetime ×1
docker ×1
dockerfile ×1
gitignore ×1
https ×1
many-to-many ×1
openssl ×1
orm ×1
ssl ×1
upgrade ×1