Как передать информацию в контроллер RESTful в laravel5.7 без использования Laravel-Forms - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь настроить простую CMS в laravel, где сообщения в блоге можно создавать и сохранять в базе данных.Я следил за учебником YouTube, который использует контроллер ресурсов, и он работает нормально.Однако в серии руководств используются формы laravel-Forms для передачи параметров в контроллер, что является устаревшим, поэтому я попытался заменить форму laravel-Form на обычную html-форму, но не могу заставить ее работать.

Конкретная серия и часть ее, о которой я говорю, это: https://www.youtube.com/watch?v=-QapNzUE4V0&index=7&list=PLillGF-RfqbYhQsN5WMXy6VsDMKGadrJ-

Я вставлю представление «создать», которое содержит форму, о которой я говорю, и затем однуЯ заменил его на неработающий.

<h1>Create Post</h1>
{!! Form::open(['action' => 'PostsController@store', 'method' => 'POST', 'enctype' => 'multipart/form-data  ']) !!}
<form action="/posts" method="post" enctype="multipart/form-data">
    <div class="form-group">
        {{Form::label('title', 'Title')}}
        {{Form::text('title', '', ['class' => 'form-control', 'placeholder' => 'Title'])}}
    </div>
    <div class="form-group">
            {{Form::label('body', 'Body')}}
            {{Form::textarea('body', '', ['id' => 'article-ckeditor', 'class' => 'form-control', 'placeholder' => 'Body Text'])}}
    </div>
    {{Form::submit('Submit', ['class'=>'btn btn-primary'])}}
{!! Form::close() !!}

Так что это тот из учебника, который отлично работает , он передает все параметры из формы в функцию сохранения вконтроллер.Но когда я вместо этого использую этот тип формы:

<h1>Create Post</h1>
<form action="/posts" method="post" enctype="multipart/form-data">
    <div class="form-group">
        <h1>Title<h1>
        <input type="text" class="form-control" name="title">
    </div>
    <div class="form-group">
            <h1>Body</h1>
            <textarea name="body" id="article-ckeditor" class="form-control" cols="30" rows="10"></textarea>
    </div>
    <input type="submit" value="Submit">
</form>

Он направит меня в / posts и просто скажет "Ошибка 419 - Ваш сеанс истек" и данные не будут сохраненыв базе данных.

Здесь вы можете увидеть функцию моего магазина в контроллере:

public function store(Request $request)
{
    $this->validate($request, [
        'title' => 'required',
        'body' => 'required',
    ]);

    // Create Post
    $post = new Post;
    $post->title = $request->input('title');
    $post->body = $request->input('body');

    $post->save();

    return redirect('/posts')->with('success', 'Post Created');
}

Спасибо за чтение!Я ценю любую помощь!

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Вы можете импортировать коллектив laravel, который теперь является отдельным пакетом. Я вставляю ссылку здесь .

Что касается нормальной формы, подобной вашей, вам нужно добавить поле csrf. Коллектив Laravel имеет здесь преимущество, поскольку он автоматически добавляет это поле, даже если вы не объявляете его. Также я предпочитаю коллектив коллективным формам.

0 голосов
/ 04 января 2019

Вы получите ошибку 419, потому что поле CSRF отсутствует в запросе формы.Пакет Laravel Form автоматически добавит это для вас, но в стандартной HTML-форме вам придется добавить его самостоятельно.К счастью, это очень просто.Внутри вашего <form> блока вам просто нужно добавить @csrf например

<h1>Create Post</h1>
<form action="/posts" method="post" enctype="multipart/form-data">

    @csrf

    <div class="form-group">
        <label>Title</label>
        <input type="text" class="form-control" name="title">
    </div>
    <div class="form-group">
        <label>Body</label>
        <textarea name="body" id="article-ckeditor" class="form-control" cols="30" rows="10"></textarea>
    </div>
    <input type="submit" value="Submit">
</form>

CSRF документы


Примечание для тех, кто использует Laravel 5.5 или ниже, вам нужно будет использовать {{ csrf_field() }} или @csrf.

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