【问题标题】:How to prevent Laravel from redirecting when validation fail?验证失败时如何防止 Laravel 重定向?
【发布时间】:2018-06-13 14:18:39
【问题描述】:

我有一个项目是在 Laravel 5.4 之上编写的。

我需要为 API 创建 CRUD。但是,当请求验证失败时,Laravel 会自动将用户引导到主页。

我想显示错误,而不是重定向,以便被调用的 API 知道错误的原因。

这是我的代码的精简版

class AssetsController extends Controller
{
    /**
     * Store a new asset in the storage.
     *
     * @param Illuminate\Http\Request $request
     *
     * @return Illuminate\Http\RedirectResponse | Illuminate\Routing\Redirector
     */
    public function store(Request $request)
    {
        try {
            $this->affirm($request);

            $data = $this->getData($request);

            $asset = Asset::create($data);

            return response()->json([
                'data' => $this->transform($asset),
                'message' => 'Asset was successfully added.',
                'success' => true,
            ]);

        } catch (Exception $exception) {
            return response()->json([
                'data' => null,
                'message' => $exception->getMessage(),
                'success' => false,
            ]);
        }
    }

    /**
     * Validate the given request with the defined rules.
     *
     * @param  Illuminate\Http\Request  $request
     *
     * @return boolean
     */
    protected function affirm(Request $request)
    {
        $rules = [
            'name' => 'required|string|min:1|max:255',
            'category_id' => 'required',
            'cost' => 'required|numeric|min:-9999999.999|max:9999999.999',
            'purchased_at' => 'nullable|string|min:0|max:255',
            'notes' => 'nullable|string|min:0|max:1000',
            'picture' => 'nullable|string|min:0|max:255',
        ];

        // This seems to redirect the user to the home page which I want to avoid
        return $this->validate($request, $rules);
    }
}

在调用$this->validate 方法时,如何防止 Laravel 重定向?

另外,在为 API 创建 CRUD 时,还有其他方法可以验证请求吗?

【问题讨论】:

    标签: php laravel laravel-5 laravel-5.4 laravel-validation


    【解决方案1】:

    你可以在affirm() 方法中做这样的事情:

    $validator = Validator::make($request->all(), $rules);
    if ($validator->fails()) {
        throw new Exception;
    }
    

    https://laravel.com/docs/5.5/validation#manually-creating-validators

    【讨论】:

    猜你喜欢
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多