2017-08-03 11 views
0

POSTMANからREST APIを介してDBにエントリをPOSTしようとしています。私はsymfonyフレームワークを使用しています。integer datetimeのメンバー関数format()を呼び出す

{ 
    "error": { 
     "code": 500, 
     "message": "Internal Server Error", 
     "exception": [ 
      { 
       "message": "Error: Call to a member function format() on integer", 
       "class": "Symfony\\Component\\Debug\\Exception\\FatalErrorException", 
       "trace": [ 
        { 
         "namespace": "", 
         "short_class": "", 
         "class": "", 
         "type": "", 
         "function": "", 
         "file": "C:\\xampp\\htdocs\\joel\\proj3\\vendor\\doctrine\\dbal\\lib\\Doctrine\\DBAL\\Types\\DateTimeType.php", 
         "line": 53, 
         "args": [] 
        } 
       ] 
      } 
     ] 
    } 
} 

これはコードです:私はDateTimeオブジェクトを待っているあなたのsetCreatedateセッターを推測

<?php 

namespace AcsUserBundle\Controller; 

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use FOS\RestBundle\Controller\Annotations as Rest; 
use FOS\RestBundle\Controller\FOSRestController; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 
use FOS\RestBundle\View\View; 
use AcsUserBundle\Entity\User; 
use Symfony\Component\Form\Extension\Core\Type\DateTimeType; 

class UserController extends FOSRestController 
{ 


    /** 
* @Rest\Post("/user/") 
*/ 
public function postAction(Request $request) 
{ 
    $data = new User; 
    $personid = $request->get('personid'); 
    $privilagevalueid = $request->get('privilagevalueid'); 
    $username = $request->get('username'); 
    $password = $request->get('password'); 



    $createdate = strtotime($request->get('createdate')); 



if(empty($personid) || empty($privilagevalueid) || empty($username)|| empty($password)|| empty($createdate)) 
{ 
    return new View("NULL VALUES ARE NOT ALLOWED", Response::HTTP_NOT_ACCEPTABLE); 
} 



    $data->setPersonid($personid); 
    $data->setPrivilagevalueid($privilagevalueid); 
    $data->setUsername($username); 
    $data->setPassword($password); 
    $data->setCreatedate($createdate); 



    $em = $this->getDoctrine()->getManager(); 
    $em->persist($data); 
    $em->flush(); 
    return new View("User Added Successfully", Response::HTTP_OK); 
} 


} 

答えて

3

$createdateのような変数を変更することができます。

$createdate = new \DateTime($request->get('createdate')); 
+0

男.....あなたは人生の節約者です... DBが更新されています。 Thanxx so much bruh .....:D – jcoder

0

リクエストから手動でデータを取得し、エンティティを作成することはお勧めしません。このためには、フォームを使用することができますし、また、あなたはすべてのフィールドがどうあるべきかのタイプを定義することができます形でボーナス:)

public function postTeamAction(Request $request) 
{ 
    $postData = json_decode($request->getContent(), true); 
    $newTeam = new Team(); 
    $form = $this->createForm(TeamType::class, $newTeam); 
    $form->submit($postData); 
    if ($form->isValid()) { 
     $this 
      ->getDoctrine()->getManager() 
      ->persist($newTeam) 
     ; 
     $this 
      ->->getDoctrine()->getManager() 
      ->flush() 
     ; 

    } 

として検証を持っています。

+0

man ..プログラミングの開始段階にあります。このコードを実装する方法はわかりません。:) ... heheh – jcoder

+0

フォームについての記事を読む:https:/ /symfony.com/doc/current/forms.html 小枝でフォームビューを作成する必要はなく、データの検証を処理するフォームクラスを作成するだけで、受け取ったデータからエンティティを自動的に作成する必要があります。 ;) –

+0

フォームが有効な場合、あなたは既に '$ newTeam'オブジェクトを残しておく必要があります。 –

1

Y-m-dのような日付形式を使用しない限り、この解決法にエラーが発生します。

$createdate = new \DateTime($request->get('createdate')); 

あなたの日付形式を知っていて、以下のオプションを使用することができます。

$createDate = $request->get('createdate'); 

$createDateObj = \DateTime::createFromFormat('d/m/Y', $createDate); 
$createDateObj = \DateTime::createFromFormat('d.m.Y', $createDate); 
$createDateObj = \DateTime::createFromFormat('m/d/Y', $createDate); 
関連する問題