2016-05-10 4 views
0

У меня есть проблема с получением книги из API Google Книги в Symfony2Symfony2 Google Books API

Я отправляю эту форму для страницы (/ Google) ...

<form action="/googlevolume" method="post"> 
     <input type="text" name="title" id="title" size="40" value=""> 
     <input type="submit" value="Search"> 
    </form> 

и это мой контроллер для страницы результата (/ googlevolume) ...

public function googlevolume(Request $request) 
{ 

     $enquiry = new Enquiry(); 

     $form->bind($request); 

     $response = $enquiry->get("https://www.googleapis.com/books/v1/volumes?q=".$form->get('title')->getData()); 

     $data=$response->json(); 

     $response2=$data['items']; 

     return $this->render('BloggerBlogBundle:Page:googlevolume.html.twig', array('items' => $response2)); 


} 

Я попытался разместить этот номер от формы

1781100489 

Что такое же, как собирается: https://www.googleapis.com/books/v1/volumes?q=1781100489

Однако, когда я поставил этот номер в форму и нажмите поиск, я получаю эту ошибку

Controller "Blogger\BlogBundle\Controller\PageController::googlevolumeAction" for URI "/googlevolume" is not callable. 

это из моего файла маршрутизации. ..

google: 
    pattern: /google 
    defaults: { _controller: BloggerBlogBundle:Page:google } 
    requirements: 
     _method: GET 

googlevolume: 
    pattern: /googlevolume 
    defaults: { _controller: BloggerBlogBundle:Page:googlevolume } 
    requirements: 
     _method: POST 

это googlevolume.html.twig ...

{# src/Blogger/BlogBundle/Resources/views/Page/googlevolume.html.twig #} 
{% extends 'BloggerBlogBundle::layout.html.twig' %} 
{% block title %} Google Books{% endblock%} 
{% block body %} 
<header> 
    <h1>Google Book</h1> 
</header> 
<br> 
{% for item in items %} 
<article> 
<img src="{{ item.volumeInfo.imageLinks.thumbnail}}"/> 
<h4>{{ item.volumeInfo.title}}</h4> 
{% if item.volumeInfo.description is defined %} 
{{ item.volumeInfo.description }} 
{% endif %} 
<strong> {{ item.volumeInfo.publishedDate }}</strong><br/> 
<b>{{ item.volumeInfo.authors | join }}</b> 
</article> 
{% endblock %} 

У кого-нибудь есть идеи, в которых я ошибаюсь?

Благодаря

ответ

1

Похоже, что вы пытаетесь сериализовать объект запроса, когда на самом деле вы просто хотите получить значение из формы. Попробуйте изменить запрос к API для:

use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 

... 

public function googlevolumeAction(Request $request) 
{ 
    $form = $this->createFormBuilder(null,[ 
      'csrf_protection' => false 
     ]) 
     ->add('title','text') 
     ->add('Search', 'submit') 
     ->getForm(); 

    $form->bind($request); 
    if($form->isValid()){ 
     $enquiry = new Enquiry(); 
     $response = json_decode(file_get_contents("https://www.googleapis.com/books/v1/volumes?q=".$form->get('title')->getData()),true); 

     if(array_key_exists('items',$response)){ 
      return $this->render('BloggerBlogBundle:Page:googlevolume.html.twig', [ 
       'items' => $response['items'] 
      ]); 
     } else { 
      return new Response('Google Volume did not have any items', 400); 
     } 
    } 

    return new Response('Google Volume Not Found', 404); 
} 

Затем маршрут:

googlevolume: 
    pattern: /googlevolume 
    defaults: { _controller: BloggerBlogBundle:Page:googlevolumeAction } 
    requirements: 
     _method: POST 

Затем очистить кэш:

php app/console cache:clear --env=prod 

или просто для разработчика

php app/console cache:clear 
+0

Do Мне нужно изменить любые другие части кода? Как я изменил его на первый, и я все еще получаю ошибку контроллера – CarlRyds

+0

iv обновил свой пост выше – CarlRyds

+0

Спасибо, Thats исправил его до степени ... однако теперь я получаю ... Класс Blogger \ BlogBundle \ Controller \ Request не существует – CarlRyds

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