api platform - Unable to generate an IRI for the item

JuliSmz picture JuliSmz · Dec 20, 2017 · Viewed 9.1k times · Source

I'm starting with API Platform and I'm using the example entity "Foo":

namespace AppBundle\Entity;

use ApiPlatform\Core\Annotation\ApiResource;
use Doctrine\ORM\Mapping as ORM;


/**
 * Foo
 *
 * @ORM\Table(name="foo")
 * @ApiResource
 * @ORM\Entity
 */
class Foo
{
    /**
     * @var string
     *
     * @ORM\Column(name="bar", type="string", length=255, nullable=false)
     */
    private $bar;

    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;


}

I succesfully see the new Entity in dashboard (See image):

API Platform Dhasboard

And I had the following error when I try to get all Foo collection:

curl -X GET "http://127.0.0.1:8000/foos" -H "accept: application/json"

    {
  "type": "https://tools.ietf.org/html/rfc2616#section-10",
  "title": "An error occurred",
  "detail": "Unable to generate an IRI for the item of type \"AppBundle\\Entity\\Foo\"",
  "trace": [
    {
      "namespace": "",
      "short_class": "",
      "class": "",
      "type": "",
      "function": "",
      "file": "/home/xxxx/api/vendor/api-platform/core/src/Bridge/Symfony/Routing/IriConverter.php",
      "line": 107,
      "args": []
    },

I tried different formats and check the the routes too:

 julian@js:~/xxxxx/api$ ./bin/console debug:router
 ------------------------------- -------- -------- ------ ----------------------------------- 
  Name                            Method   Scheme   Host   Path                               
 ------------------------------- -------- -------- ------ ----------------------------------- 
  _wdt                            ANY      ANY      ANY    /_wdt/{token}                      
  _profiler_home                  ANY      ANY      ANY    /_profiler/                        
  _profiler_search                ANY      ANY      ANY    /_profiler/search                  
  _profiler_search_bar            ANY      ANY      ANY    /_profiler/search_bar              
  _profiler_phpinfo               ANY      ANY      ANY    /_profiler/phpinfo                 
  _profiler_search_results        ANY      ANY      ANY    /_profiler/{token}/search/results  
  _profiler_open_file             ANY      ANY      ANY    /_profiler/open                    
  _profiler                       ANY      ANY      ANY    /_profiler/{token}                 
  _profiler_router                ANY      ANY      ANY    /_profiler/{token}/router          
  _profiler_exception             ANY      ANY      ANY    /_profiler/{token}/exception       
  _profiler_exception_css         ANY      ANY      ANY    /_profiler/{token}/exception.css   
  _twig_error_test                ANY      ANY      ANY    /_error/{code}.{_format}           
  api_entrypoint                  ANY      ANY      ANY    /{index}.{_format}                 
  api_doc                         ANY      ANY      ANY    /docs.{_format}                    
  api_jsonld_context              ANY      ANY      ANY    /contexts/{shortName}.{_format}            
  api_foos_get_collection         GET      ANY      ANY    /foos.{_format}                    
  api_foos_post_collection        POST     ANY      ANY    /foos.{_format}                    
  api_foos_get_item               GET      ANY      ANY    /foos/{id}.{_format}               
  api_foos_put_item               PUT      ANY      ANY    /foos/{id}.{_format}               
  api_foos_delete_item            DELETE   ANY      ANY    /foos/{id}.{_format}               

 ------------------------------- -------- -------- ------ ----------------------------------- 

It's possible what I need some special library in my server? What I'm doing wrong?

Thanks in advance!

Answer

Iwan Wijaya picture Iwan Wijaya · Dec 20, 2017

You're missing a getter for your id

public function getId()
{
    return $this->id;
}