小编laz*_*mit的帖子

在doctrine-mongodb中的preUpdate事件中创建/保留新文档

我正在使用doctrine-mongodb-odm-1.0.0-BETA10并尝试提供一些基于事件运行\InitialDocument时的自定义逻辑preUpdate

假设\InitialDocument获得了某种状态,该状态必须表现为 new 的初始状态\StateDocument。我正在做这样的事情:

class InitDocListener implements \Doctrine\Common\EventSubscriber {
    public function getSubscribedEvents()
    {
        return [
            Events::preUpdate
        ];
    }

    public function preUpdate($args){
        $document = $args->getDocument();
        if($document instanceOf InitialDocument && $document->getState() == 'mine'){
            $stateDocument = new \StateDocument();
            $stateDocument->setInitDocument($document);
            $args->getDocumentManager()->persist($stateDocument);
            //no flush cause recursion happens
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

prePersist事件\StateDocument发生,但它不会将新文档保留在数据库中。因此postPersist事件永远不会被触发。

还有一些更多的自定义逻辑,但都在事件范围内。在某些时候,该逻辑可能会抛出异常,该异常必须停止更新事件,InitialDocument因此InitialDocument状态取决于\StateDocument业务范围的创建过程。

我怎么解决这个问题?preFlush在changeSet重新计算之前运行的事件不确定InitialDocument实例。所以这是一种“搜索”更新的技巧preFlush,让我认为这不是正确的方法。请给我一个合适的建议。谢谢。

php mongodb odm doctrine-odm doctrine-mongodb

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

Nginx web-dav 409 Conflict CRUD php API

尝试将代理HTTP CRUD请求的nginx配置为fastcgi

nginx配置:

server {
    listen   80;
    server_name api.example.dev;

    dav_methods  PUT DELETE;

    dav_access group:rw all:r;
    create_full_put_path on;

    index index_dev.php;
    set $root_path '/var/www/api/public';
    root $root_path;
    try_files $uri $uri/ @rewrite;

    location @rewrite {
        rewrite ^/(.*)$ /index_dev.php?_url=/$1;
    }

    location ~ \.php {
        fastcgi_pass unix:/var/run/php-fpm.api.sock;
        fastcgi_index /index_dev.php;
        include /etc/nginx/fastcgi_params;
        fastcgi_split_path_info       ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO       $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HOST $host;
        fastcgi_param DESTINATION $http_destination;
        fastcgi_param OVERWRITE $http_overwrite;
        fastcgi_param APPLICATION_ENV dev;
    }
}
Run Code Online (Sandbox Code Playgroud)

在PHP方面,我有phalcon php-framework.Witch可以很好地处理简单的GET/POST请求.框架中的路由器可以处理PUT,DELETE方法.但是当我尝试制作简单的PUT方法时,请求nginx返回409上面的配置冲突错误.

我找不到任何关于该案例的建议以及如何从nginx将web_dav方法传递给php.

谢谢.

php crud nginx

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

标签 统计

php ×2

crud ×1

doctrine-mongodb ×1

doctrine-odm ×1

mongodb ×1

nginx ×1

odm ×1