【发布时间】:2017-09-09 02:32:18
【问题描述】:
我正在 Laravel 5.4 中测试一个 API。我现在正在通过 API 存储记录。我在如何使用 Request::input() 或 Input::get() 验证 POST 数据方面遇到一些问题。
LessonsController.php
<?php
namespace App\Http\Controllers;
use App\Http\Requests;
use App\Lesson;
use App\Acme\Transformers\LessonTransformer;
//use Illuminate\Http\Request;
use Illuminate\Support\Facades\Input;
use App\Http\Controllers\Controller;
class LessonsController extends ApiController
{
/**
* @var Acme\Transformers\LessonTransformer
*/
protected $lessonTransformer;
function __construct(LessonTransformer $lessonTransformer)
{
$this->lessonTransformer = $lessonTransformer;
// $this->middleware('sentry.auth')->only('post'); // basic level of protection for creating a lession
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
* If we are using basic authentication, we should be using SSL
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store()
{
if( ! Input::get('title') || ! Input::get('body')){
return $this->setStatusCode(422)->respondWithError('Parameters failed validation for a lesson.');
}
Lesson::create($request->all());
return $this->respondCreated('Lesson successfully created.');
}
/**
* Display the specified resource.
*
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$lesson = Lesson::find($id);
if( ! $lesson) {
return $this->respondNotFound('Lesson does not exist');
}
return $this->respond([
'data' => $this->lessonTransformer->transform($lesson)
]);
}
}
当我使用 POST 请求使用 POSTMAN 测试上面的代码时。系统提示我“{"error":"Parameters failed validation for a course.","status_code":422}" . 当我尝试添加数据或不添加数据时收到错误消息。
您知道如何更正我的 store() 代码吗?任何帮助表示赞赏。
【问题讨论】:
-
请指定此方法的路由以及您通过 POSTMAN 发送的请求 url。
-
store方法的路由和请求url是一样的:test.app:8000/api/v1/lessons。请求是 POST。
-
让我们假设您的路线正确指向您的方法。在做任何困难的事情之前,首先只需返回“Hello world..”;在您的商店方法的顶部,以查看请求是否到达那里。即使您通过了验证部分,您也会尝试使用您的方法不可用的 $request var 访问参数。您可以在输入参数中使用 (Request $request) 使其可访问..
-
您的邮递员使用正确吗?您必须将输入 text 和 body 作为 Body 并且不要忘记选择 x-www-form-urlencoded 如果这没有帮助。请提供邮递员截图
-
此代码似乎有效(有正确的“验证”失败响应)。问题可能与您传递的实际输入有关。做一个
dd(Input::all())看看它是什么。
标签: javascript php html mysql laravel