Laravel 7 Nullable Validation не работает (все решения применены) - PullRequest
0 голосов
/ 03 марта 2020

Laravel Nullable не работает, я пробую все, но все равно не работает. Пожалуйста, посмотрите мой код ..

Контроллер: -


<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Pop;

class PopController extends Controller
{
    public function index(){
        return view('test2');
    }

    public function create(Request $request){

        $formvalidtion = $request->validate([
            'usercode' => ['nullable', 'required'],
        ]);

        return "<h1>SUCCESS</h1>";
    }

}

Модель: -


<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Pop extends Model
{
    protected $timestamps = false;
    protected $fillable = ['usercode'];
}

Миграция: -

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreatePopsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('pops', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->integer('usercode')->nullable();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('pops');
    }
}

Маршрут: -


route::get('test', 'PopController@index');

route::post('testcheck', 'PopController@create')->name('uc');

Просмотр: -


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Nullable Test</title>
</head>
<body>
    <h1>Test Nullable</h1>
    <form action="{{ route('uc') }}" method="POST">
        @csrf

        <input type="number" name="usercode" id="" placeholder="Enter User Code">
            @error('usercode')
                {{ $message }}
            @enderror
        <br>
        <input type="submit" >

    </form>
</body>
</html>

Я трачу 1 час, чтобы найти решение, но не получить. В некоторых видео на YouTube упоминается, что тип данных поля должен быть int и иметь значение null. это также не работает, есть ли какое-либо решение?

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Нельзя использовать вместе правила проверки nullable и required:

  • required: проверяемое поле должно присутствовать во входных данных и не быть пустым.
  • nullable: проверяемое поле может быть нулевым.
  • present: проверяемое поле должно присутствовать во входных данных, но может быть пустым.
  • filled : Проверяемое поле не должно быть пустым, если оно присутствует.

Вы можете использовать nullable и present вместе:

$formvalidtion = $request->validate([
    'usercode' => ['nullable', 'present'],
]);
1 голос
/ 03 марта 2020

Вы не указываете, что вы имеете в виду под "не работает" (то есть, что вы ожидаете, но что происходит вместо этого), но я предполагаю, что вы имеете в виду, что нулевые значения не принимаются проверкой.

Это было бы потому, что required правило ожидает, что значение будет непустым. Таким образом, ваше правило nullable, вероятно, проходит, но required терпит неудачу.

Если вы хотите, чтобы значение присутствовало, но не обязательно было не пустым, вы можете использовать правило present .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...