Форма Laravel без Коллектива - PullRequest
0 голосов
/ 28 февраля 2019

Я учу Ларавел.Текущая стабильная версия, насколько я знаю, 5.8.Я следую учебным пособиям, и мне действительно нравится структура, но становится немного хлопотно, когда эти учебники доходят до того, что они знакомят с тем, как включены формы.Все эти учебные пособия используют формы LaravelCollective, которые больше не работают с 5.8, и это заброшенный проект, поэтому я бы предпочел не использовать его в любом случае.

Но это оставляет меня в замешательстве относительно того, какие лучшие практикипредназначены для использования форм с Laravel.У меня были некоторые попытки создания форм, но ... в большинстве случаев это просто HTML, на котором почти нет Laravel, если это имеет смысл.Единственный бит Laravel здесь - это form action, где он указывает на функцию store в TodosController.Ниже приведен файл с именем create.blade.php.

@extends('layouts.app')

@section('content')
    <h1>Create Todo</h1>
    <form action="{{action('TodosController@store')}}" method="post">
        @csrf
        <div class="form-group">
            <label for="text">Text</label>
            <input type="text" name="text" class="form-control" placeholder="Enter title"/>
        </div>
        <div class="form-group">
            <label for="body">Body</label>
            <textarea class="form-control"  name="body" id="body" rows="10" placeholder="Enter details"></textarea>
        </div>
        <div class="form-group">
            <label for="due">Due date</label>
            <input type="text" name="due" class="form-control" placeholder="Enter due date"/>
        </div>
        <input type="submit" value="Submit" class="btn btn-primary">
    </form>
@endsection

. Это прекрасно работает, но я просто чувствую, что здесь я не использую лезвие должным образом.Любые указатели будут с благодарностью.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

То, что у вас есть, - это хорошая отправная точка, однако стоит обратить внимание и на регистрационную форму шаблонов (это не на официальной странице проекта Laravel, поскольку опционально представлены шаблоны)и не находятся в официальном репо по умолчанию).

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

 <div class="form-group">
     <label for="text">{{__('Text')}}</label>
     <input type="text" name="text" class="form-control{{ $errors->has('text') ? ' is-invalid' : '' }}" value="{{ old('text') }}"placeholder="Enter title"/>
 </div>

Дополнительно:

  • __('Text') автоматически переведет Text в зависимости от выбранной локали и доступных языковых ресурсов.
  • {{ $errors->has('text') ? ' is-invalid' : '' }} "украсит" поле стилем ошибки bootstrap-4, если проверка на стороне сервера не удалась (и, следовательно, прошла проверку$errors переменная для представления)
  • {{ old('text') }} предварительно заполнит ввод значением, которое было ранее заполнено в случае, если форма не прошла проверку и пользователь был перенаправлен обратно на ту же страницу.

Это поможет улучшить взаимодействие с пользователем, однако имейте в виду, что все это инструменты на стороне сервера (поскольку Laravel на стороне сервера)фреймворк), так что, вероятно, лучше для пользователя также добавить проверки на стороне клиента и проверки.

0 голосов
/ 28 февраля 2019

На самом деле, вы используете больше снарядов, чем просто form action.@csrf означает Подделка межсайтовых запросов , и это надежный способ защитить вас от этого, как сказано в документации:

Laravel автоматически генерирует токен CSRF"для каждого активного сеанса пользователя, управляемого приложением.Этот токен используется для проверки того, что аутентифицированный пользователь действительно выполняет запросы к приложению.

Каждый раз, когда вы определяете форму HTML в своем приложении, вы должны включить в форму скрытое поле токена CSRF, чтобыпромежуточное ПО защиты CSRF может подтвердить запрос.Вы можете использовать директиву @csrf Blade для генерации поля токена:

Если у вас есть форма PUT, PATCH OR DELETE, вы должны использовать директиву blade @method, чтобы сообщить, какое действие должен использовать laravel:

HTML-формы не поддерживают действия PUT, PATCH или DELETE.Таким образом, при определении маршрутов PUT, PATCH или DELETE, которые вызываются из формы HTML, вам необходимо добавить в форму скрытое поле _method.Значение, отправленное с полем _method, будет использоваться в качестве метода HTTP-запроса:

Вы можете добиться этого, просто используя:


    <form action="/foo/bar" method="POST">
    @method('PUT')
    @csrf
    </form>

Кроме того, я думаю, что выиспользуя Laravel / Blade просто отлично.Обязательно прочитайте документы для получения дополнительной информации.

Удачи!

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