在FOSRestBundle上合并ParamConverter和BodyConverter对象

时间:2016-03-16 09:23:32

标签: symfony fosrestbundle

我使用param转换器从url和body转换器获取对象以获取对象形式的主体。

这完全适用于GETPOST方法,但我必须采用一种棘手的方式进行更新(PUT):

/**
 * @param PowerDNSDomain                   $domain
 * @param PowerDNSRecord                   $record
 * @param PowerDNSRecord                   $updatedRecord
 * @param ConstraintViolationListInterface $validationErrors
 *
 * @ParamConverter("updatedRecordData", converter="fos_rest.request_body")
 *
 * @return View
 */
public function putAction(PowerDNSDomain $domain, PowerDNSRecord $record, PowerDNSRecord $updatedRecord, ConstraintViolationListInterface $validationErrors)
{
    if ($validationErrors->count() > 0) {
        return $this->handleBodyValidationErrorsView($validationErrors);
    }

    $record->setName($updatedRecord->getName().'.'.$domain->getName())
           ->setContent($updatedRecord->getContent())
           ->setTtl($updatedRecord->getTtl())
           ->setPrio($updatedRecord->getPrio());

    $this->get('manager.dns')->saveRecord($record);

    return $this->view($record);
}

简而言之,我必须检索两个PowerDNSDomain对象(一个来自网址,一个来自正文)并手动更新每个字段

这太过分了,不是吗?

首选方法是拥有这样的方法签名:

public function putAction(PowerDNSDomain $domain, ConstraintViolationListInterface $validationErrors)

PowerDNSDomain $domain是将身体转换器对象合并到param转换器中的结果。

在这种情况下,我只需要获得验证错误并保存对象。

我怎样才能做到这一点? : - )

相关配置:

fos_rest:
    routing_loader:
        default_format: json
    body_converter:
        enabled: true
        validate: true
    serializer:
        serialize_null: true
    view:
        formats:
            xml:  false
            json: true
            rss:  false
            yml:  true
        view_response_listener: force
    param_fetcher_listener: force
    format_listener:
        rules:
            - { path: '^/api/', priorities: ['json', 'yml'], fallback_format: json, prefer_extension: true }
            - { path: '^/', stop: true } # FOSRest should not handle other routes than API
        media_type:
            enabled: true

可能相关的问题:https://github.com/FriendsOfSymfony/FOSRestBundle/issues/1238

0 个答案:

没有答案