JMSシリアライザーとFOSRestBundleの間に競合があると思います。idとaccessTokenの代わりに空のjsonオブジェクトを取得します。v2のドキュメントが不足していますか?
fos_rest:
routing_loader:
default_format: json
include_format: false
format_listener: true
view:
view_response_listener: 'force'
formats:
json: true
templating_formats:
html: false
json: false
body_converter:
enabled: true
class SecurityController extends FOSRestController
{
*
* @View(serializerGroups={"login"})
*
*/
public function postLoginAction(Request $request)
{
// $user = MyOAuthUserResponse extends AbstractUserResponse
// before upgrade I just use: return $this->view($user);
$view = $this->view($user);
$context = new Context();
$context->addGroup('login');
$view->setContext($context);
return $this->handleView($view);
}
/**
* @Serializer\ExclusionPolicy("All")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @Serializer\Expose()
*/
protected $id;
/**
* @var \DateTime
*
* @ORM\Column(name="created", type="datetime")
* @Gedmo\Timestampable(on="create")
*/
private $created;
/**
* @var string
* @ORM\Column(type="string", nullable=true)
* @Serializer\Expose()
*/
private $accessToken;
問題が見つかりました!
に vendor/jms/serializer/src/JMS/Serializer/GraphNavigator.php:209
$exclusionStrategy = $context->getExclusionStrategy(); // Returns NULL
これは(アップグレード前に)正常に機能するようです:
return $this->view($user);
しかし、アップグレード以降、$ exclusionStrategyは次のようになります。
JMS\Serializer\Exclusion\GroupsExclusionStrategy Object
(
[groups:JMS\Serializer\Exclusion\GroupsExclusionStrategy:private] => Array
(
[login] => 1
)
[nestedGroups:JMS\Serializer\Exclusion\GroupsExclusionStrategy:private] =>
)
私は、コンテキストコードを削除することを修正するために、私は、ビューに渡され、渡しview
にhandleview
ように:
return $this->handleView($this->view($user));
私はこのアップグレードドキュメントと間違えました:
use FOS\RestBundle\Context\Context;
$view = new View();
$context = new Context();
$view->setContext($context);
$context = $view->getContext();
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加