dou91808 2018-07-19 07:31
浏览 229
已采纳

Laravel 5.6。 无法在构造函数中获取错误消息

I am trying to get validator error message after it failed, but unsuccessfully. I have this code:

<?php

namespace App\Model\Validators\Common;

use App\Model\Contracts\AbstractClasses\Validator as BaseValidator;
use App\Model\Contracts\Interfaces\Validators\Common\ConversationMessageValidatorInterface;
use Illuminate\Support\Facades\Validator;

class ConversationMessageValidator extends BaseValidator implements ConversationMessageValidatorInterface
{

    /**
     * Validates message sending.
     * @param mixed $data
     * @return boolean
     */
    public function validateCreate($data)
    {

        $this->validator = Validator::make($data, [
            'message' => 'required'
        ]);     
        $this->validator->fails();
        dd($this->validator->errors()->first());

    }  

}

<?php 

namespace App\Model\Contracts\AbstractClasses;

use App\Model\Contracts\Interfaces\Validators\Common\ValidatorInterface;

class Validator implements ValidatorInterface
{

    protected $validator;

    /**
     * Returns validator object.
     * @return mixed
     */ 
    public function getValidator()
    {

        return $this->validator;

    }

    /**
     * Returns validation errors.
     * @return mixed
     */ 
    public function getErrors()
    {

        return $this->getValidator()->errors();

    }   

}   

it dumps this message: "validation.required", even tough I have pretty much the same code in my previous project which works as I expect:

<?php

namespace App\Model\Validators\PresentationalSubsystem;

use Illuminate\Support\Facades\Validator;
use App\Model\Contracts\AbstractClasses\Validator as AbstractValidator;
use App\Model\Contracts\Interfaces\Validators\PresentationalSubsystem\ForumThreadValidatorInterface;

class ForumThreadValidator extends AbstractValidator implements ForumThreadValidatorInterface
{

    public function validateThread($data)
    {

        $this->validator = Validator::make($data, [
            'content' => 'required|string|min:1',
            'description' => 'required|string|min:1',
            'title' => 'required|string|min:1',
            'forum_id' => 'required|exists:forums,id'
        ]);

        $this->validator->fails();
        print_r($this->validator->errors()->first());

    }

}

And this prints out: The content field is required.

My question would be: why my first code does not print error message? instead it prints validation rule that fails. How to change that?

EDIT: validateCreate is called here:

   public function sendMessage($account, $data)
    {

        if(!$this->conversationMessageValidator->validateCreate($data)) {
            return $this->conversationMessageFormatter->prepareCreateResponseWithErrors($this->conversationMessageValidator->getErrors());
        }
}

and this function is called from constructor:

public function sendMessage(Request $request, $conversationId)
{

    $request->merge(['conversation_id' => $conversationId]);
    return $this->conversationService->sendMessage(Auth::user(), $request->all());

}   
  • 写回答

2条回答 默认 最新

  • douyong1850 2018-07-19 08:48
    关注

    I found a solution. resources/lang/validation.php file was removed accidentally some time before, thats why instead of messages it was returning the actual path to translation of it. I always thought that it is an error code, but I was wrong.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 angular开发过程中,想要读取模型文件,即图1的335行,会报404错误(如图2)。但我的springboot里配置了静态资源文件,如图3。且在该地址下我有模型文件如图4,请问该问题该如何解决呢?
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?
  • ¥15 讲解电路图,付费求解
  • ¥15 有偿请教计算电磁学的问题涉及到空间中时域UTD和FDTD算法结合的
  • ¥15 vite打包后,页面出现h.createElement is not a function,但本地运行正常
  • ¥15 Java,消息推送配置