2015-08-14 33 views
0

我目前使用Silex 1.3里面的Doctrine DBAL版本2.5来调用MySQL DB的REST调用。我设法让GET/GET/{id}和DELETE/{id}工作相当简单,但我似乎无法让我的POST/PUT工作。Silex - 我的REST POST/PUT调用没有接收参数

这里是休耕代码

$app->post('/student', function($firstName, $lastName) use($app) { 
    $sql = "INSERT INTO tbl_students (firstName, lastName) 
      VALUES (:firstName, :lastName)"; 
    $student = $app['db']->prepare($sql); 
    $student->bindValue(':firstName', $firstName, PDO::PARAM_STR); 
    $student->bindValue(':lastName', $lastName, PDO::PARAM_STR); 

    $student->execute(); 

    return "insert successful"; 
}); 

$app->put('/student/{id}', function($id, $firstName, $lastName) use($app){ 
    $sql = "UPDATE tbl_students 
      SET firstName = :firstName, lastName = :lastName 
      WHERE id = :id"; 
    $student = $app['db']->prepare($sql); 
    $student->bindValue(':id', $id, PDO::PARAM_INT); 
    $student->bindValue(':firstName', $firstName, PDO::PARAM_STR); 
    $student->bindValue(':lastName', $lastName, PDO::PARAM_STR); 
    $student->execute(); 

    return "student succesfully updated"; 
}); 

如果我硬编码的默认值,它工作完全正常,以及使用bindParam(),并用自己的价值观。

我把我的卷曲后收到此错误消息在我转储一切恢复

<span class="exception_message">Controller &quot;Closure&quot; requires that you provide a value for the &quot;$firstName&quot; argument (because there is no default value or because there is a non optional argument after this one).</span> 

下面是我用

休耕卷曲命令
curl -X POST -d "firstName=First123&lastName=Last456" URL/student 
curl -X POST -d '{"firstName":"First123","lastName":"Last456"}' URL/student --header "Content-Type:application/json" 
curl -X POST -d "firstName=First123&lastName=Last456" URL/student --header "Content-Type:text/html" 
+1

'firstName'和'lastName'是不是你的路线的一部分 - 因此,为什么您会收到错误消息。您必须从'请求'中读取这些信息,或者将它们包含在您的路线中。 – Artamiel

回答

1

的Silex不会自动为您创造方法的参数对应于你的发布变量。您必须从@Artamiel建议的请求对象中获取它们。

参见http://silex.sensiolabs.org/doc/usage.html#example-post-route

为您的文章操作更新的代码应该是这样的:

$app->post('/student', function(Request $request) use($app) { 
    $firstName = $request->get('firstName'); 
    $lastName = $request->get('lastName'); 
    $sql = "INSERT INTO tbl_students (firstName, lastName) 
      VALUES (:firstName, :lastName)"; 
    $student = $app['db']->prepare($sql); 
    $student->bindValue(':firstName', $firstName, PDO::PARAM_STR); 
    $student->bindValue(':lastName', $lastName, PDO::PARAM_STR); 

    $student->execute(); 

    return "insert successful"; 
}); 
相关问题