在 Slim 框架上发布请求

Posted

技术标签:

【中文标题】在 Slim 框架上发布请求【英文标题】:Post request on Slim Framework 【发布时间】:2014-05-02 12:26:39 【问题描述】:

有人可以帮我吗? 发出帖子请求时出现此 500 错误...无法理解它是什么

注意:如果我从其他客户端 Chrome 扩展程序运行此 api,它可以工作,否则我会收到以下错误...

由于以下错误,应用程序无法运行: 细节 类型:错误异常 代码:8 消息:试图获取非对象的属性 线路:114

路线:

<?php 
require 'Slim/Slim.php';
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim();
$app->get('/events','getEvents');
$app->get('/events/:year/:month', 'getMonth');
$app->get('/events/:year/:month/:day','getAllAfter');
$app->post('/events', 'addEvent');
$app->run();

这是我的功能:

function addEvent() 

$app = \Slim\Slim::getInstance();
$request = $app->request();
$body = $request->getBody();
$event = json_decode($body);

//Line 114
$submited_date = $submited_date = $event->'date_submit' .' '.$event->'time_submit';   
$sql = "INSERT INTO events (edate, title, performers, address) VALUES (:edate, :title, :performers, :address)";
try 
    $conx = getconx();
    $stmt = $conx->prepare($sql);
    $stmt->bindParam("edate", $submited_date);
    $stmt->bindParam("title", $event->etitle);
    $stmt->bindParam("performers", $event->performers);
    $stmt->bindParam("address", $event->address);
    $stmt->execute();
    $event->id = $conx->lastInsertId();
    $conx = null;
    $result = array("status"=>"success","events"=>$event);
    echo json_encode($result);
 catch(PDOException $e) 
    $result = array("status"=>"error","message"=>'Exception: ' . $e->getMessage());
    echo json_encode($result,JSON_PRETTY_PRINT);


这是发送的json:


   "date":"24 March, 2014",
   "date_submit":"2014-03-24",
   "time":"4:00 PM",
   "time_submit":"16:00:00",
   "etitle":"Event     Title",
   "performers":"david",
   "address":"Place"

jquery 代码: 使用 JSON.stringify() 修复;发送请求之前的数据

     function addEvent(jsondat) 
            console.log('addEvent');

            $.ajax(
                type: 'POST',
                contentType: 'application/json',
                url: rootURL,
                dataType: "json",
                data: JSON.stringify(jsondat); ,
                success: function(data, textStatus, jqXHR)
                    alert(Event created successfully');
                ,
                error: function(jqXHR, textStatus, errorThrown)
                    alert('addEvent error: ' + textStatus);
                
            );
        
        jQuery(document).on('ready', function() 
            jQuery('form#myForm').bind('submit', function(event)
                event.preventDefault();
                var form = this;
                var pson = ConvertFormToJSON(form);
                //document.write(JSON.stringify(pson));
                addEvent(pson);
            );
        );

【问题讨论】:

我在右边标注了评论 尝试使用var_dump$event$body 来确保您得到预期的结果。 刚刚添加了那些 var_dump 你确定这是第 114 行吗?你能发布整个异常,包括完整的消息和堆栈跟踪吗? @Phil 我已经添加了跟踪 【参考方案1】:

问题找到了,并且不在我的 index.php 中 它在ajax请求中...... 这是通过对我的序列化数组使用 JSON.stringify() 来解决的。

这就是为什么只是在其余客户端工作,因为那里的 json 发送正确...... 感谢来自 slim 框架支持的 Matt http://help.slimframework.com/discussions/problems/6789-not-able-to-handle-post-request

【讨论】:

以上是关于在 Slim 框架上发布请求的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Slim 中访问 POST 请求的 JSON 请求正文?

PHP Slim 框架 CORS

Slim Framework 端点单元测试

.NET 3.5CF WebRequest 到 Slim 框架

带有授权标头的 GET 请求之前的 OPTIONS 请求在苗条框架 4 中不起作用

TF-slim : FIFOQueue 已关闭且元素不足(请求 1,当前大小 0)