【问题标题】:How to validate POST data in Laravel 5.4?如何在 Laravel 5.4 中验证 POST 数据?
【发布时间】: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) 使其可访问..
  • 您的邮递员使用正确吗?您必须将输入 textbody 作为 Body 并且不要忘记选择 x-www-form-urlencoded 如果这没有帮助。请提供邮递员截图
  • 此代码似乎有效(有正确的“验证”失败响应)。问题可能与您传递的实际输入有关。做一个dd(Input::all()) 看看它是什么。

标签: javascript php html mysql laravel


【解决方案1】:

要在 Laravel 中验证表单数据,只需使用“Laravel Form Requests”。这允许您使用 Laravel 的一些预定义验证规则来验证请求中的表单数据,如果需要,您还可以创建自定义 laravel 验证逻辑。

根据 Laravel 文档:

表单请求是包含验证逻辑的自定义请求类。

它将简化您的验证逻辑,使您的代码整洁并让您处理复杂的验证。

【讨论】:

  • 目前,我没有使用任何形式。我只是通过 POSTman 的 API 存储数据
  • @redshot 没有必要仅将它与可以用于验证任何类型请求的表单一起使用。您只需在商店功能中输入提示即可。
  • 感谢您的回答接近我所需要的。但我认为 Request $request 现在就足够了
【解决方案2】:

试试这个,可能有帮助

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.');

    }

【讨论】:

    【解决方案3】:

    我上面的代码的问题是它在 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.');
    
    }
    

    注意:在 postman 中,在 Body

    中选择 x-www-form-urlencoded

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-29
      • 2018-05-30
      • 2017-12-17
      • 1970-01-01
      • 2018-12-22
      • 2017-07-20
      • 1970-01-01
      • 2017-07-19
      相关资源
      最近更新 更多