проверить массив, если он пустой или нет, полученный от ФОРМЫ, в которой есть токен генерации CSRF - PullRequest
0 голосов
/ 21 сентября 2018

Поскольку я использую csrf в форме, массив $data, который передается в функцию запроса, никогда не бывает пустым.Как решить эту проблему, чтобы при отправке формы без заполненных полей ввода я получал «данные пусты»?

view.blade.php

<form action="{{url('/userdata')}}" method="POST">
    @csrf
    <div class="form-group">
        <label for="name">Name:</label>
        <input type="text" class="form-control" name="name">
    </div>
    <button type="submit" class="btn btn-default">Submit</button>
</form>

Controller.php

public function userdata(Request $request)
{
    $data=$request ->all();
    if(!empty($data)){
        echo "data is filled";
    }else{
        echo "data is empty";
    }
}

Ответы [ 3 ]

0 голосов
/ 21 сентября 2018

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

<form action="{{url('/userdata')}}" method="POST">
    @csrf
    <div class="form-group">
        <label for="name">Name:</label>
        <input type="text" class="form-control" name="name" required>
    </div>
    <button type="submit" class="btn btn-default">Submit</button>
</form>

В противном случае, если имя является единственным вашим полем, вы можете сделать это:

public function userdata(Request $request){
    $data = $request->except(["_token"]);
    if($data['name'] != ""){
      echo "data is filled";
    } else {
      echo "data is empty";
    }
}
0 голосов
/ 21 сентября 2018

Вы можете использовать метод get():

public function userdata(Request $request){
    $data = $request->get("_token");
    if(!empty($data)){
      echo "data is filled";
    } else {
      echo "data is empty";
    }
}
0 голосов
/ 21 сентября 2018

Извините, я неправильно понял ваш вопрос в моем первом ответе.Значение всегда будет отправлено для элементов ввода на странице, даже если они пусты.Правильный способ сделать это - создать запрос проверки .

Создать что-то похожее на этот класс, хотя, я уверен, гораздо аккуратнее;)

<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreUserdata extends FormRequest {
    public function authorize() {return true;}
    public function rules() {
        return ["name" => ["required", "max:64"]];
    }
}

Изатем отредактируйте сигнатуру вашего метода контроллера, чтобы вместо ожидания Request он искал ваш класс проверки (не забудьте приведенный выше оператор use):

public function userdata(StoreUserdata $request){
// ....
}

Теперь ваши запросы не будут выполненыесли вход name пустой или слишком длинный.Существует множество возможных правил проверки .

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