1

JMSSerializerBuilderを使用してオブジェクトをjsonでエンコードし、AJAX呼び出しを行えるようにしようとしています。

composer を使用してバンドルを正常にインストールしました。

次に、公式ドキュメントに従って、私はやっています:

<?php

namespace Pondip\GeolocBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use JMS\Serializer\SerializerBuilder;   

class DefaultController extends Controller
{
    public function getLakesSurroundingAction($lat=0, $lng=0, $limit = 50, $distance = 50, $unit = 'km')
    {
        $lakesNearby= $this->getNearby($lat, $lng, $limit, $distance, $unit);
        $serializer = JMS\Serializer\SerializerBuilder::create()->build();
        $return = $serializer->serialize($return, 'json');
    }

}

しかし、それは戻ります

FatalErrorException:

エラー: クラス 'Pondip\GeolocBundle\Controller\JMS\Serializer\SerializerBuilder' が C:\Program Files (x86)\wamp\www\Pondip Dev\src\Pondip\GeolocBundle\Controller\DefaultController.php 行 51 に見つかりません

51行目は次のとおりです。

$serializer = JMS\Serializer\SerializerBuilder::create()->build();

なぜそれが起こっているのですか?行を削除するとuse JMS\Serializer\SerializerBuilder;(ドキュメントで指定されていないため)、内部サーバーエラーが発生します。

4

3 に答える 3

2

のようにuse JMS\Serializer\SerializerBuilder;クラスを指定する必要がありますSerializerBuilder。それがない場合は、完全修飾名を使用します\JMS\Serializer\SerializerBuilder(先頭のバックスラッシュに注意してください!)

詳細な参照: http://www.php.net/manual/en/language.namespaces.basics.php

于 2013-03-15T23:01:26.290 に答える
1

これは、名前空間を正しく使用していないためです。use ステートメントは、特定の名前空間のエイリアスを生成します。このuse JMS\Serializer\SerializerBuilder;ステートメントは、それがクラスSerializerBuilderのエイリアスであることを意味します。JMS\Serializer\SerializerBuilder

コードで行う場合$serializer = JSM\Serializer\SerializerBuilder::create()、これは非修飾名前空間です。つまり、現在の名前空間に入るということです。Pondip\GeolocBundle\Controller\JMS\Serializer\SerializerBuilderこれは、PHP が(Pondip\GeolocBundle\Controller\名前空間にいるため) を検索していることを意味します。

これを修正するには、単に使用します$serializer = SerializerBuilder::create()。のエイリアスを設定したのでSerializerBuilder、正しいクラスに到達し、すべてが機能します。

詳細については、このような「PHP 名前空間」チュートリアルを参照してください。

于 2013-03-15T23:03:16.900 に答える
1

私は個人的に$this->container->get('serializer');代わりに使用しなければなりませんでした$serializer = $container->get('jms_serializer');

于 2013-04-10T14:52:19.177 に答える