I FOSRestBundle wie folgt konfiguriert haben:FOSRestBundle Setup für JSON Rückkehr aber immer noch fragen für Twig Vorlage
#FOSRestBundle
fos_rest:
param_fetcher_listener: true
body_listener: true
format_listener:
rules:
- { path: ^/, priorities: [ json, html ], fallback_format: ~, prefer_extension: true }
media_type:
version_regex: '/(v|version)=(?P<version>[0-9\.]+)/'
body_converter:
enabled: true
validate: true
view:
mime_types:
json: ['application/json', 'application/json;version=1.0', 'application/json;version=1.1']
view_response_listener: 'force'
formats:
xml: false
json: true
templating_formats:
html: true
exception:
codes:
'Symfony\Component\Routing\Exception\ResourceNotFoundException': 404
'Doctrine\ORM\OptimisticLockException': HTTP_CONFLICT
messages:
'Symfony\Component\Routing\Exception\ResourceNotFoundException': true
allowed_methods_listener: true
access_denied_listener:
json: true
Und ich habe dies an Controller:
namespace PDI\PDOneBundle\Controller\Rest;
use FOS\RestBundle\Controller\FOSRestController;
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
use FOS\RestBundle\Controller\Annotations\QueryParam;
use FOS\RestBundle\Controller\Annotations\Get;
class RepresentativeRestController extends FOSRestController
{
/**
* Get all representatives.
*
* @return array
*
* @ApiDoc(
* resource = true,
* https = true,
* description = "Get all representatives.",
* statusCodes = {
* 200 = "Returned when successful",
* 400 = "Returned when errors"
* }
*)
* @Get("/api/v1/reps")
*/
public function getRepsAction()
{
$em = $this->getDoctrine()->getManager();
$entities = $em->getRepository('PDOneBundle:Representative')->findAll();
if(!$entities)
{
return $this->view(null, 400);
}
return $this->view($entities, 200);
}
}
Aber wenn ich die folgende URL versuchen app_dev.php/api/v1/reps
Ich habe diesen Fehler:
Unable to find template "". 500 Internal Server Error - InvalidArgumentException 3 linked Exceptions: Twig_Error_Loader » InvalidArgumentException » InvalidArgumentException »
Ich erwarte, dass API eine gut geformte JSON ein s das folgende Beispiel:
{
"id":"30000001",
"veeva_rep_id":"0055648764067SwzAAE",
"display_name":"John Know",
"avatar_url":"http://freelanceme.net/Images/default%20profile%20picture.png",
"rep_type":"VEEVA",
"username":"[email protected]",
"first":"John",
"last":"Know",
"title":"Sales Representative",
"phone":"800-555-1212",
"email":"[email protected]",
"territory_id":"200454001",
"inactive":"no",
"total_contacts":"6",
"total_shares":"0",
"totalViews":"0",
"lastLoginAt":"2015-05-05 15:45:57",
"lastVeevaSyncAt":"2015-05-05 15:45:57",
"createdAt":"2015-05-05 15:45:57",
"updatedAt":"2015-05-05 15:45:57"
}
Ist FOSRestBundle nicht für die Rückgabe von JSON konfiguriert? Warum fragst du noch nach Twig-Vorlage? Wie kann ich das beheben?
Erster Test:
Als @Jeet mich schlage ich habe mit Postman versucht (die gleiche wie die Erweiterung ist er mir gesagt) und nach dem Header Content-Type
zu application/json
der Fehler verwandelt sich in diesem
Malformed JSON
Also, die FOSRestBundle ist nicht einrichten Header wie sollte sein und Controller gibt keine gültige JSON, wie repariere ich diese?
Zweiter Test:
Wie @Jeet vorgeschlagen Ich betreibe diesen Test:
/**
* Get all representatives.
*
* @return array
*
* @ApiDoc(
* resource = true,
* https = true,
* description = "Get all representatives.",
* statusCodes = {
* 200 = "Returned when successful",
* 400 = "Returned when errors"
* }
*)
* @Get("/api/v1/reps")
* @View()
*/
public function getRepsAction()
{
$em = $this->getDoctrine()->getManager();
$entities = $em->getRepository('PDOneBundle:Representative')->findAll();
$temp = array("1", "2", "3");
$view = $this->view($temp, Codes::HTTP_OK);
return $this->handleView($view);
}
Und noch das gleiche Problem:
Unable to find template "". 500 Internal Server Error - InvalidArgumentException 3 linked Exceptions: Twig_Error_Loader » InvalidArgumentException » InvalidArgumentException »
Was sonst kann falsch sein Hier? Hab ich bei der Konfiguration etwas übersehen?
Ich vergaß app/config/routing.yml
und src/PDI/PDOneBundle/Resources/config/routing.yml
zunächst hinzuzufügen, so hier sie geht, vielleicht ist dies das fehlende Stück auf dem Puzzle ist und gibt Ihnen eine bessere Vorstellung davon, wo das Problem kommt von:
#app/config/routing.yml
#PDOne
pdone:
resource: "@PDOneBundle/Resources/config/routing.yml"
template:
resource: "@TemplateBundle/Resources/config/routing.yml"
#FOSUserBundle
fos_user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"
prefix:/
#NelmioApiDocBundle:
NelmioApiDocBundle:
resource: "@NelmioApiDocBundle/Resources/config/routing.yml"
prefix: /api/doc
#SonataAdmin
admin:
resource: '@SonataAdminBundle/Resources/config/routing/sonata_admin.xml'
prefix: /admin
_sonata_admin:
resource: .
type: sonata_admin
prefix: /admin
#src/PDI/PDOneBundle/Resources/config/routing.yml
pdone:
resource: "@PDOneBundle/Controller/"
type: annotation
prefix: /
Dritten Test : wenn ich ein Tool wie Postman
und stellen Sie die richtigen Header verwende ich die Entitäten bekam, wie ich will,
Definitiv ist etwas, mit Anforderung von Client-Seite falsch, siehe Bild unten:
ich nicht finden können, wo das Problem was ich brauche so dringend jemand hier helfen, weil ich schon die Ideen
Haben Sie "Content-Type" als "application/json" konfiguriert? – Jeet
@Jeet wo soll ich das machen? Ist die Konfiguration von FOSRes nicht so, wie Sie auf dem OP sehen können? – ReynierPM
Probieren Sie app_dev.php/api/v1/reps in der Advanced Rest Client-Anwendung von Google Chrome aus (App-Erweiterung), dort haben Sie eine Option. – Jeet