我正在测试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测试上面的代码时。我的提示是&#34; {&#34;错误&#34;:&#34;参数验证课程失败。&#34;,&#34; status_code&#34;:422} &#34; 。 我尝试添加数据时收到错误,或者我没有添加数据。
您是否知道如何更正我的store()代码?任何帮助表示赞赏。
答案 0 :(得分:1)
要在Laravel中验证表单数据,只需使用“Laravel Form Requests”。这允许您使用Laravel的一些预定义验证规则在请求中验证表单数据,如果需要,还可以创建自定义laravel验证逻辑。
根据Laravel文档:
表单请求是包含验证逻辑的自定义请求类。
它将简化您的验证逻辑,使您的代码整洁,并让您处理复杂的验证。
答案 1 :(得分:1)
试试这个,可能会有所帮助
public function store(Request $request)
{
if( ! $request->has('title') || ! $request->has('body')){
return $this->setStatusCode(422)->respondWithError('Parameters failed validation for a lesson.');
}
Lesson::create($request->all());
return $this->respondCreated('Lesson successfully created.');
}
答案 2 :(得分:1)
上面我的代码的问题是它在store()方法中没有$ request var。
在下面的代码中,Request类现在被注入到store方法中。
public function store(Request $request)
{
if (! $request->input('title') or ! $request->input('body') )
{
return $this->respondUnprocessableEntity('Parameters failed validation for a lesson.');
}
Lesson::create($request->all());
return $this->respondCreated('Lesson successfully created.');
}
注意:在邮递员中,在正文
中选择x-www-form-urlencoded