我正在尝试使用JMSSerializerBuilder
对json中的对象进行编码,以便能够进行AJAX调用。
我已经通过作曲家成功安装了这个包。
然后,在the official documentation之后,我正在做:
<?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;
行时(由于未在doc中指定),我只会收到内部服务器错误。
答案 0 :(得分:2)
如果use JMS\Serializer\SerializerBuilder;
到位,您应该像SerializerBuilder
一样处理该课程。没有它,请使用完全限定名称\JMS\Serializer\SerializerBuilder
(注意前导反斜杠!)
进一步参考:http://www.php.net/manual/en/language.namespaces.basics.php
答案 1 :(得分:1)
那是因为你没有正确使用命名空间。 use语句为特定命名空间生成别名。 use JMS\Serializer\SerializerBuilder;
语句表示SerializerBuilder
是JMS\Serializer\SerializerBuilder
类的别名。
在代码中执行$serializer = JSM\Serializer\SerializerBuilder::create()
时,它是一个非限定命名空间,这意味着它进入当前命名空间。这意味着PHP正在搜索Pondip\GeolocBundle\Controller\JMS\Serializer\SerializerBuilder
(因为您在Pondip\GeolocBundle\Controller\
命名空间中)。
要解决此问题,请使用$serializer = SerializerBuilder::create()
。因为我们为SerializerBuilder
设置了一个别名,所以它会进入正确的类,一切正常。
有关详细信息,请查看一些“PHP命名空间”教程,例如this one。
答案 2 :(得分:1)
我个人不得不使用$this->container->get('serializer');
代替$serializer = $container->get('jms_serializer');