2014-12-06 79 views
2

我們在Symfony2中使用下面的包來創建一個RESTful API。控制器必須返回一個響應(對象(Symfony Component Form Form)給出)

new FOS\RestBundle\FOSRestBundle(), 
new JMS\SerializerBundle\JMSSerializerBundle(), 
new Nelmio\ApiDocBundle\NelmioApiDocBundle(), 

我們得到下面的錯誤運行PHP後composer.phar更新

[2014-12-05 10:39:41] security.INFO: Populated SecurityContext with an anonymous Token [] [] 
[2014-12-05 10:39:41] request.CRITICAL: Uncaught PHP Exception LogicException: "The controller must return a response (Object(Symfony\Component\Form\Form) given)." at /var/www/html/symfony2/app/bootstrap.php.cache line 3020 {"exception":"[object] (LogicException: The controller must return a response (Object(Symfony\\Component\\Form\\Form) given). at /var/www/html/symfony2/app/bootstrap.php.cache:3020)"} [] 
[2014-12-05 10:39:41] security.DEBUG: Write SecurityContext in the session [] [] 

我們使用以下步驟

//install symfony 
php composer.phar create-project symfony/framework-standard-edition symfony2/ 

//move composer into symfony folder 
cp composer.phar symfony2/composer.phar 
rm composer.phar 
cd symfony2 

//symfony dependencies 
php composer.phar require doctrine/doctrine-fixtures-bundle 
php composer.phar require "friendsofsymfony/rest-bundle" "@dev" 
php composer.phar require "jms/serializer-bundle" "@dev" 
php composer.phar require "nelmio/api-doc-bundle" "@dev" 

的API請求將返回500服務器在我們的服務器上安裝的Symfony2錯誤。

由於我不確定它爲什麼不起作用,我已經將錯誤追溯到下面的點。

@Annotations\View(
    templateVar = "form" 
) 

ClassResourceInterface類負責以上操作。

這可能涉及到這個問題,但在此發佈的解決方案不起作用:

FOSRestBundle: The controller must return a response (Array()) given

東西是不對的類:

Nelmio\ApiDocBundle\Annotation\ApiDoc 

有沒有人有這個問題,因爲好?

謝謝

+0

什麼的'Annotations'別名您使用的語句? – 2014-12-06 19:25:05

+0

@WouterJ你用什麼聲明來表示? – pppglowacki 2014-12-08 08:18:46

回答

2

您應該設置FOS REST配置文件/app/config/config.yml

例如:

#/app/config/config.yml 
fos_rest: 
param_fetcher_listener: true 
body_listener: true 
format_listener: false 
routing_loader: 
    default_format: json 
view: 
    view_response_listener: 'force' 
    formats: 
     xml: true 
     json : true 
    default_engine: none 
    templating_formats: 
     html: true 
access_denied_listener: 
    json: true 
allowed_methods_listener: true 
+0

感謝您的回答。它像一個魅力一樣工作! – medina 2015-10-11 06:57:22

0

嘗試在啓動任何新項目之前自行更新您的作曲文件以避免問題。

composer self-update 

,或者是安裝在你的www目錄作曲:

php composer.phar self-update 

,那麼你可以與所有的包創建一個新的symfony項目,你需要:

composer create-project symfony/framework-standard-edition symfony2/ 
cd symfony2 
composer require doctrine/doctrine-fixtures-bundle 
composer require friendsofsymfony/rest-bundle 
composer require jms/serializer-bundle 
composer require nelmio/api-doc-bundle 

有時候,在這一點上我需要給「app/cache」或「app/bootstrap.php.cache」等目錄提供讀/寫權限,因爲我的終端使用我的用戶,但apache使用_www用戶。

然後,你必須註冊在應用新的包/ AppKernel.php

new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle(), 
new FOS\RestBundle\FOSRestBundle(), 
new JMS\SerializerBundle\JMSSerializerBundle(), 
new Nelmio\ApiDocBundle\NelmioApiDocBundle(), 

那麼你的包NelmioApiDocBundle需要註冊自己的路由和配置:

# app/config/routing.yml 
NelmioApiDocBundle: 
    resource: "@NelmioApiDocBundle/Resources/config/routing.yml" 
    prefix: /api/doc 

# app/config/config.yml 
nelmio_api_doc: ~ 

一切都必須在工作這一點,因爲我已經這樣做了。

+0

我跟着步驟,一切順利如預期。 API文檔顯示沒有任何問題,但當我去任何我的API調用,我仍然得到相同的500錯誤。 – pppglowacki 2014-12-08 08:20:43

+0

所以你認爲這個問題是由於這些包而不是你自己的API代碼?你能分享一些導致500錯誤的API調用嗎? – 2014-12-08 09:23:48

相關問題