Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel Lavavel 8禁用翻译,使用字段名和规则响应_Laravel_Validation_Translation - Fatal编程技术网

Laravel Lavavel 8禁用翻译,使用字段名和规则响应

Laravel Lavavel 8禁用翻译,使用字段名和规则响应,laravel,validation,translation,Laravel,Validation,Translation,我只是有一个问题,但我结巴了。我只需要禁用验证程序的翻译。例如,让字段name具有规则max:80。当验证失败时,我希望使用json进行响应: { "errors": { "name": { "max": 80 }, }, "status": "error" } 有什么办法可以实现吗?我制作了自己的翻译器(它扩展了\

我只是有一个问题,但我结巴了。我只需要禁用验证程序的翻译。例如,让字段name具有规则max:80。当验证失败时,我希望使用json进行响应:

{
    "errors": {
        "name": {
            "max": 80
        },
    },
    "status": "error"
}
有什么办法可以实现吗?我制作了自己的翻译器(它扩展了\illumb\Translation\Translator),我发现,我可以检查翻译是否来自validation.php文件,并用Translation的键替换该值。但是这个解决方案看起来非常丑陋

编辑: 我决定离开。问题在于验证,而不是翻译。因此,我制作了CustomValidator

namespace App\Overrides;

use Illuminate\Validation\Validator;

class CustomValidator extends Validator
{
    /**
     * Determine if the data passes the validation rules.
     *
     * @return bool
     */
    public function passes(): bool
    {
        return parent::passes();
    }
}
和它的工厂:

namespace App\Overrides;

use Illuminate\Validation\Factory;

class ValidatorFactory extends Factory
{
    protected function resolve(array $data, array $rules, array $messages, array $customAttributes )
    {
        if (is_null($this->resolver)) {
            return new CustomValidator($this->translator, $data, $rules, $messages, $customAttributes);
        }

        return call_user_func($this->resolver, $this->translator, $data, $rules, $messages, $customAttributes);
    }
}
然后我换了工厂

namespace App\Providers;

use App\Overrides\ValidatorFactory;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->extend('validator', function () {
            return $this->app->get(ValidatorFactory::class);
        });
    }
但有一个新问题。验证使用的数据库规则(如“唯一”)throwns ecxeption:尚未设置状态验证程序。其他规则没有。

$validator->failed()是答案

它包含所有失败的规则:

array:2 [
  "name" => array:1 [
    "Max" => array:1 [
      0 => "80"
    ]
  ]
  "password" => array:1 [
    "Regex" => array:1 [
      0 => "/[a-z]/"
    ]
  ]
]

您是否在验证方法调用之前尝试过setLocale('en')?我对每个请求使用自定义RequestClass来定义字段的规则。Lang'en'是我的默认语言。你的翻译需要其他语言,对吗?所以您可以在requestNo的构造函数中将其更改为默认值,我们可以假设,我需要验证器,而不需要任何语言的翻译。我只想获取失败的规则和相关表单的字段名。默认情况下,验证失败的错误将作为数组发送,或者将键作为列/字段名发送。好的,这就是您要查找的。我更关心翻译