2017-06-29 2 views
0

が、私は、API-プラットフォームリソースとして公開されたエンティティを持っているし、次のプロパティが含まれていますAPIプラットフォーム - 更新NULL可能な文字列のエラー

/** 
* @ORM\Column(type="string", nullable=true) 
*/ 
private $note; 

私は(PUT経由)エンティティを更新しようと、以下のJSONを送信:

{ 
    "note": null 
} 

私はsymfonyのシリアライザから次のエラーを取得する:

[2017年6月29日21時47分33秒]要求/ var/www/html/testapp/server/vendor/symfony/symfony/src /にある "string"型、 "NULL"型の予想される引数は、 symfony /コンポーネント/シリアライザ/ノーマライザ/ AbstractObjectNormalizer.phpライン196 {"例外": "[オブジェクト](Symfony \コンポーネント\シリアライザ\例外\ UnexpectedValueException(コード:0):\"文字列\ "、\" \ var/www/html/testapp/server/vendor/symfony/symfony/src/symfony/component/serializer/0):/var/www/html/testapp/server/vendor/symfony/symfony/src/Symfony/Component/PropertyAccess/PropertyAccessor.php:275にある\ "文字列\"、\ "NULL \"という型の期待される引数)」}

私はこのプロパティでnullsを許可するいくつかの設定が不足しているようですね?私がnullのノートを含むリソースを取得すると、そのノートが正しくヌルとして返され、物事が奇妙にするには:

{ 
    "@context": "/contexts/RentPayment", 
    "@id": "/rent_payments/1", 
    "@type": "RentPayment", 
    "id": 1, 
    "note": null, 
    "date": "2016-03-01T00:00:00+00:00" 
} 

私は何をしないのです - PS Iは、API-プラットフォーム

+1

ちょうど野生の刺し傷がありますが、あなたは型打ちのセッターを使用していますか? –

+0

ありがとう!うわー、なぜ私はそれを考えなかったのですか?あなたが望むなら、それを答えとして加えてください。 – dblack

答えて

1
への大規模な初心者くさいですよそれは実際には代わりに任意の型のヌルまたは文字列をチェックして、我々はそう、次は nullable typesを好ましいと思われているPHP 7.1のとおり

public function setNote(string $note) { 
    $this->note = $note; 
    return $this; 
} 

よしでは、あなたはタイプを使用していたコメントで決定されたセッターアラカルトを示唆しました。

public function setNote(?string $note) { 

以前のバージョンでは、タイプヒントを削除して、内部でタイプチェックを追加するだけでした。これは、(ternary operator)の場合sorthandある

$this->note = $note ?: null; 

public function setNote($note) { 
    if ((null !== $note) && !is_string($note)) { 
     // throw some type exception! 
    } 

    $this->note = $note; 
    return $this; 
} 

あなたが考慮したいと思うかもしれないもう一つは、のようなものを使用しています。文字列が空の場合は値をnullに設定します(ただし、 '0'のバグでは長いバージョンを行う必要があります)。

関連する問題