gpt4 book ai didi

symfony - 使用 FOSRestBundle 返回响应时无法找到模板

转载 作者:行者123 更新时间:2023-12-01 09:57:46 24 4
gpt4 key购买 nike

我正在使用 FOS Rest Bundle 构建 Api,问题是每次我尝试返回任何内容时都会收到错误消息:“无法找到模板”我真的不想渲染模板,但是序列化我拥有的实体。

这是我的代码:

路由.yml:

acme_api_register:
pattern: /user
defaults: { _controller: AcmeApiBundle:User:post, _format: json }
requirements:
_method: POST

controller.php:

<?php

namespace Acme\ApiBundle\Controller;

use Acme\ApiBundle\Entity\Patient;
use Acme\ApiBundle\Entity\User;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use FOS\RestBundle\Controller\Annotations\View;

//use FOS\RestBundle\View\View;

class UserController extends Controller
{
/**
* @View()
*/
public function postAction()
{
$user = new Patient();

$user->setName("Daniel");
$user->setLastName("My lastName");
$user->setEmail("pleasework@gmail.com");

return $user;
}
}

和我的app/config.yml

sensio_framework_extra:
view: { annotations: false}
router: { annotations: true }

fos_rest:
format_listener:
rules:
- prefer_extension: false
routing_loader:
default_format: json
view:
view_response_listener: force

非常感谢任何帮助!

开发人员:

Composer .json:

{
"name": "symfony/framework-standard-edition",
"license": "MIT",
"type": "project",
"description": "The \"Symfony Standard Edition\" distribution",
"autoload": {
"psr-0": { "": "src/" }
},
"require": {
"php": ">=5.3.3",
"symfony/symfony": "~2.4",
"doctrine/orm": "~2.2,>=2.2.3",
"doctrine/doctrine-bundle": "~1.2",
"twig/extensions": "~1.0",
"symfony/assetic-bundle": "~2.3",
"symfony/swiftmailer-bundle": "~2.3",
"symfony/monolog-bundle": "~2.4",
"sensio/distribution-bundle": "~2.3",
"sensio/framework-extra-bundle": "~3.0",
"sensio/generator-bundle": "~2.3",
"incenteev/composer-parameter-handler": "~2.0",
"friendsofsymfony/rest-bundle": "1.1.*",
"jms/serializer-bundle": "0.13.*"
},
"scripts": {
"post-install-cmd": [
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
],
"post-update-cmd": [
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
]
},
"config": {
"bin-dir": "bin"
},
"extra": {
"symfony-app-dir": "app",
"symfony-web-dir": "web",
"symfony-assets-install": "symlink",
"incenteev-parameters": {
"file": "app/config/parameters.yml"
},
"branch-alias": {
"dev-master": "2.4-dev"
}
}
}

最佳答案

发生这种情况是因为您可能正在使用浏览器来测试您的 API。如果你打开你的控制台检查器,你会看到你的浏览器发送给你的 API 的请求是什么。如您所见,Accept header 类似于:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

如您所见,第一个接受的格式是 text/html。这就是为什么我猜您的应用程序试图返回 HTML 响应,但找不到模板的原因!

所以我建议您在不需要时禁用html格式,并将json设置为默认格式。

fos_rest:
param_fetcher_listener: true
format_listener:
rules:
fallback_format: json
prefer_extension: false
priorities: [json, xml]
view:
view_response_listener: force
formats:
json: true
xml: true
jsonp: false
rss: false
html: false
failed_validation: HTTP_BAD_REQUEST

有了这样的配置,你说你支持的唯一格式是 jsonxml ,如果没有指定,使用 json .现在再次打开浏览器,您将获得 XML 格式的资源。那是因为 Accept header 仍然是 Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8。您的浏览器不知道您正在调用 Rest API 以及您的首选格式:-)

要测试您的 API,我建议您使用合适的客户端。如果您使用的是 Chrome,请查看 Advanced REST client扩展名。

关于symfony - 使用 FOSRestBundle 返回响应时无法找到模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22054650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com