小编mar*_*rcv的帖子

以天为单位获取PHP日期时间差异,将午夜视为一天的变化

什么是最简单的方法来获得两个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)

php datetime date dateinterval

27
推荐指数
3
解决办法
4万
查看次数

教义的多对多自我引用和互惠

默认情况下,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)

因此,加入entity1entity2小号friends 意味着entity2会在entity1朋友.

php doctrine many-to-many doctrine-orm

18
推荐指数
1
解决办法
9387
查看次数

Apache警告我的自签名证书是CA证书

由于我不清楚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和密钥的证书.

所以问题是:这个较长的版本做的是什么,短版本没有,为什么在某些情况下(如今对我来说)是必要的?

apache ssl https openssl

11
推荐指数
1
解决办法
1万
查看次数

声明Doctrine Embeddable是否可以为空

假设我有两个Doctrine实体,Person并且Company.两者都有一个address接受地址值对象的字段.根据业务规则,Company::Address必需时Person::Address可以为null.

Doctrine 2.5提出了Embeddable类型,它显然是以值对象为基础构建的,实际上,我认为它是我案例的完美解决方案.

但是,有一件事我不能做:声明可以Person::Address为空而Company::Address不是.nullableEmbeddable的字段本身存在布尔属性,但当然这适用于嵌入地址的每个实体.

有人知道我是否遗漏了某些东西,或者这是否是由于技术限制,是否有解决方法等?现在,我看到的唯一解决方案是将所有Embeddable字段声明为nullable: true并在我的代码中处理约束.

php orm doctrine value-objects doctrine-orm

7
推荐指数
2
解决办法
2211
查看次数

在Dockerfile中使用ENTRYPOINT会使基本图像的CMD被忽略

看起来好像我的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)

docker dockerfile

5
推荐指数
1
解决办法
1552
查看次数

为什么SymfonyRequirements.php被排除在.gitignore之外?

如果我理解正确,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应该或不应该跟踪它?

version-control gitignore symfony

3
推荐指数
1
解决办法
3360
查看次数

禁用主义查询缓存

在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); …

caching doctrine symfony doctrine-orm

2
推荐指数
1
解决办法
5061
查看次数

如何使用Symfony 3目录结构使用Codeception

我最近将我的Symfony项目升级到2.8版,然后采用了Symfony 3目录结构.现在,当我运行Codeception时,它给出了以下错误消息:

Acme\SiteBundle\Entity\Acme\User类中的注释"@Doctrine\ORM\Mapping\Entity"不存在,或者无法自动加载."

所以Doctrine注释不是自动加载的.我知道Symfony 3在自动加载方面做了一些改动.这对Codeception有什么影响,需要调整哪些才能使它正常工作?

upgrade symfony codeception

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