如何在Laravel 5.4中验证POST数据?

时间:2017-04-13 05:37:14

标签: javascript php html mysql laravel

我正在测试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()代码?任何帮助表示赞赏。

3 个答案:

答案 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