Доктрина о Symfony 2, обвиняющая десятичные числа в том, что они двойные - PullRequest
0 голосов
/ 08 января 2012

Я читаю документацию по Symfony 2 и застрял на модельной части книги . $price является десятичной шкалой 2:

// src/Acme/StoreBundle/Entity/Product.php
namespace Acme\StoreBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="product")
 */
class Product
{
    // ...

    /**
     * @ORM\Column(type="decimal", scale=2)
     */
    protected $price;

    // ..
}

Я сгенерировал сеттеры и геттеры, как указано в документации через консоль, и дал мне это для того же класса сущности:

/**
 * Set price
 *
 * @param dicimal $price
 */
public function setPrice(\decimal $price)
{
    $this->price = $price;
}

Итак, Doctrine использует хинтинг типов, чтобы $price был десятичным. проблема в том, что оно постоянно поднимает это исключение:

Catchable Fatal Error: Argument 1 passed to 
Acme\StoreBundle\Entity\Product::setPrice() 
must be an instance of decimal, double given,

Вот как он вызывается в defaultCountroller:

// ...
public function createAction()
    {
    $product = new Product();
    $product->setName('A Foo Bar');
    $product->setPrice('19.99');
    $product->setDescription('Lorem ipsum dolor');

    $em = $this->getDoctrine()->getEntityManager();
    $em->persist($product);
    $em->flush();

    return new Response('Created product id '.$product->getId());
}

здесь они передаются в виде строки (возможно, это ошибка документации), но даже если я изменю ее на десятичную, я получаю одно и то же исключение. К счастью, я только что побрился, но, пожалуйста, помогите мне в этом. в чем проблема?

1 Ответ

3 голосов
/ 08 января 2012

\ decimal не является системным классом или типом в PHP. Просто удалите подсказку типа.

...