2016-03-09 3 views
1

Я работаю над проектом, не были, я должен использовать JavaScript для определения разрешения экрана, видовой ...PHP не маршрут найден для POST с FOSRestBundle

Я использую Symfony 2.8, и я создал REST API для размещения (на стороне клиента с ajax) на серверную сторону (и поместить его в объекты Doctrine).

Я тестирование API с:

curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"screen":[{"id": 1,"resolution": "1920x1080", "viewport": "60x60", "device_ar": "1.5", "px_ratio": "1.00", "zoom": "8%"}]}' myurl/api/screen 

и у меня есть удивительный Нет маршрут найден для POST.

Вот мой routing.yml:

screen: 
type: rest 
prefix: /api 
resource: MyBrowserBundle\Controller\ScreenController 
methods: [POST] 

и мой контроллер экрана:

class ScreenController extends FOSRestController 
{ 

/** 
* @var $resolution, $viewport, $device_ar, $px_ratio, $zoom 
* @Post() 
*/ 
public function postScreenAction($resolution, $viewport, $device_ar, $px_ratio, $zoom) 
{ 

    $userpost_screen = new Screen(); 

    $userpost_screen->setResolution($resolution); 
    $userpost_screen->setViewport($viewport); 
    $userpost_screen->setDeviceAr($device_ar); 
    $userpost_screen->setPxRatio($px_ratio); 
    $userpost_screen->setZoom($zoom); 

    $em = $this->getDoctrine->getManager(); 
    $em->persist($userpost_screen); 
    $em->flush(); 
} 

} 

И мой конфиг для fosrestbundle:

fos_rest: 
param_fetcher_listener: true 
body_listener: true 
format_listener: true 
view: 
    view_response_listener: 'force' 
    formats: 
     xml: true 
     json : true 
    templating_formats: 
     html: true 
    force_redirects: 
     html: true 
    failed_validation: HTTP_BAD_REQUEST 
    default_engine: twig 
routing_loader: 
    default_format: json 

Я работаю над этим, так как этим утром, и я до сих пор не могу найти, что случилось, небольшая помощь может быть полезна :)

благодаря

ответ

0

Хорошо, таким образом я изменил мой контроллер к этому:

public function postScreenAction(Request $request) 
{ 

    $userpost_screen = new Screen(); 
    $em    = $this->getDoctrine()->getManager(); 
    $params   = array(); 
    $content   = $this->get("request")->getContent(); 
    if (!empty($content)) { 
     $params = json_decode($content, true); 
    } 

    $userpost_screen->setResolution($params["screen"]["resolution"]); 
    $userpost_screen->setViewport($params["screen"]["viewport"]); 
    $userpost_screen->setDeviceAr($params["screen"]["device_ar"]); 
    $userpost_screen->setPxRatio($params["screen"]["px_ratio"]); 
    $userpost_screen->setZoom($params["screen"]["zoom"]); 


    $em->persist($userpost_screen); 
    $em->flush(); 
} 

тестирование с:

curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"screen":{"resolution": "1920x1080", "viewport": "60x60", "device_ar": "1.5", "px_ratio": "1.00", "zoom": "8%"}}' dev/~bgonckel/web/symfony/MyBrowser/web/app_dev.php/api/screen 

И это отлично работает :)

Смежные вопросы