为了账号安全,请及时绑定邮箱和手机立即绑定

Symfony - 日期时间作为参数

Symfony - 日期时间作为参数

PHP
Helenr 2021-11-05 15:44:51
我无法使用 Symfony 定义我的日期时间参数。如果 last_scan_date 为空,我试图返回空,如果不返回结果!错误说:传递给 checkLastScan() 的参数 2 必须是 DateTime 的实例,给出的字符串我的功能:public function checkLastScan($hash, \DateTime $lastScanDate){    $findLastScan = $this->getMyRepository()->findOneBy([        'hash' => $hash,        'lastScanDate' => $lastScanDate    ]);    if (!$findLastScan) {        throw new \Exception('Not found!');    }    if ($lastScanDate === null) {        return null;    } else {        return $findLastScan;    }}和我的电话:$this->requirePostParams(['hash', 'last_scan_date']);$this->container->get('app')->checkLastScan(        $this->data['hash'],        $this->data['last_scan_date']    );    return $this->success();和实体:/** * @ORM\Column(name="last_scan_date", type="date", nullable=true) */private $lastScanDate;也许问题是在需要 post params 时,例如:/** * Require post params * * @param $params */protected function requirePostParams($params){    $currentRequest = $this->get('request_stack')->getCurrentRequest();    $postData = $currentRequest->request->all();    $postContent = json_decode($currentRequest->getContent(), true);    if (!empty($postContent)) {        $postData = $postContent;    }    $this->data = $postData;    $missingParams = [];    foreach ($params as $param) {        if (!array_key_exists($param, $postData)) {            $missingParams[] = $param;        }    }
查看完整描述

1 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

如果$this->data(我一开始问,但您没有正确回答我)只是 POST 数组,当然该数组的所有成员都被视为字符串。


您必须解析last_scan_date字符串并将其转换为 DateTime 类型。


这是函数的代码(将 YOUR_POST_FORMAT 的值更改为您在 HTML 表单中使用的格式):


/**

 * Require post params

 *

 * @param $params

 */

protected function requirePostParams($params)

{

    $currentRequest = $this->get('request_stack')->getCurrentRequest();


    $postData = $currentRequest->request->all();


    $postContent = json_decode($currentRequest->getContent(), true);


    if (!empty($postContent)) {

        $postData = $postContent;

    }


    // HERE YOU PARSE STRING TO DATETIME TYPE

    if (isset($postData['last_scan_date']) && !empty($postData['last_scan_date'])) {

        $postData['last_scan_date'] = DateTime::createFromFormat('YOUR POST FORMAT', $postData['last_scan_date'])

    } else {

        $postData['last_scan_date'] = null;

    }


    $this->data = $postData;


    $missingParams = [];


    foreach ($params as $param) {

        if (!array_key_exists($param, $postData)) {

            $missingParams[] = $param;

        }

    }

}


查看完整回答
反对 回复 2021-11-05
  • 1 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信