Symfony 4 - Установить DateTime - PullRequest
0 голосов
/ 22 мая 2018

, поэтому я следил за этой базой данных и учебным пособием по доктрине: https://symfony.com/doc/current/doctrine.html

единственное отличие состоит в том, что я добавил к нему поле created_ts (среди некоторых других полей, но они работают нормально, поэтомуне нужно вдаваться в них).

Я использовал команду make:entity для генерации моего класса, а метод для установки моего created_ts был сгенерирован следующим образом:

public function setCreatedTs(\DateTimeInterface $created_ts): self
{
    $this->created_ts = $created_ts;

    return $this;
}

Так что вмоя /index страница Я пошел, чтобы сохранить новую сущность, используя:

$category->setCreatedTs(\DateTimeInterface::class, $date);

У меня было странное чувство, что это будет ошибкой, и я был прав:

Type error: Argument 1 passed to App\Entity\Category::setCreatedTs() must implement interface DateTimeInterface, string given

но я неуверен, как реализовать DateTimeInterface внутри функции .. Я пробовал поискать в Google, но он показывает много Symfony2 сообщений, некоторые я пытался безрезультатно.

Как мне установить значение datetimeв моей сущности из ->set метода?

(если ответ уже есть, пожалуйста, ссылку. #symfonyScrub)

update

# tried doing this:
$dateImmutable = \DateTime::createFromFormat('Y-m-d H:i:s', strtotime('now')); # also tried using \DateTimeImmutable

$category->setCategoryName('PHP');
$category->setCategoryBio('This is a category for PHP');
$category->setApproved(1);
$category->setGuruId(1);
$category->setCreatedTs($dateImmutable); # changes error from about a string to bool

1 Ответ

0 голосов
/ 22 мая 2018

Если ваша дата является текущей, вы можете просто сделать это:

$category->setCreatedTs(new \DateTime())

Ваша первая ошибка была вызвана функцией strtotime, которая возвращает метку времени, но конструктор \ DateTime ожидал Y-m-d H:i:s формат.

Поэтому вместо создания допустимого \ DateTime он возвращает false.

Даже если в этом случае это не нужно, для создания * 1010 нужно было сделать что-то подобное.* на основе отметки времени:

$date = new \DateTime('@'.strtotime('now'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...