【问题标题】:Laravel file validation - how fix "variable is immediately overridden"Laravel 文件验证 - 如何修复“变量被立即覆盖”
【发布时间】:2021-02-27 10:44:14
【问题描述】:

我在 Laravel 中制作项目。我将此代码用于验证文件大小和格式:

class KnowledgeBaseMovieRequest extends FormRequest
{

    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        $id = $this->route('knowledge_base_movie');

        $rules = [
            'name' => ['required', 'max:255'],
        ];

        if (empty($id)) {
            $rules['movie'] = ['file', 'required', 'max:200000'];
            $rules['movie'] = ['file', 'max:20000', new Mp4File];
        }

        return $rules;
    }

}

class Mp4File implements Rule {

    const MIMES = [
        'video/mp4'
    ];
    const EXT = 'mp4';

    public function passes($attribute, $file) {
        return in_array($file->getClientMimeType(), self::MIMES) && $file->getClientOriginalExtension() === self::EXT;
    }

    public function message() {
        return ':attribute musi być plikiem .mp4.';
    }

}

我需要最大大小为 200000 且格式为 mp4 的文件。

在 tjis 行:

$rules['movie'] = ['file', 'required', 'max:200000'];
$rules['movie'] = ['file', 'max:20000', new Mp4File];

我有“$rules['movie'] 立即被覆盖”

我该如何解决?

【问题讨论】:

  • 为什么要覆盖下一行定义的变量?
  • 如何将这 2 个条件写在 1 行中?;)

标签: php laravel


【解决方案1】:

只需将所有规则分组到一个时间变量中:

$rules['movie'] = ['file', 'required', 'max:200000', new Mp4File];

为什么要为同一个索引设置 2 行?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 2014-04-07
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 2021-03-18
    相关资源
    最近更新 更多