Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Может без контроллера нельзя отправлять данные POST
нет, причина в том что без шаблона нельзя в форму вставить CSRF-токен. то есть конечно можно, но для этого нужны манипуляции с формой на джаваскприте, которые ещё сложнее, чем просто нормально вывести страницу с формой через обработчик.
просто не выводи формы через html, а сделай маршрут с формой, в нём return view('forma') а в шаблоне resources/views/forma.blade.php вставь код своей формы и вызов csrf_field()
Не в сети
Пишу для тех кто тоже занимается по видеоурокам и столкнулся с такой же проблемой.
Необходимо создать 2 rout в файле web.php
Route::get('/comments',function (){
return view('form');
});
Route::post('/comments',function (){
print_r($_POST);
});
1-ый ведет на форму, которую необходимо поместить в resources/views/form.blade.php
2-ой обрабатывает саму форму.
Да, ошибка выскакивает именно из-за не использования csrf_field().
форму в файле resources/views/form.blade.php
писать так:
<form action="/comments" method="POST">
{{ csrf_field() }}
Имя:
<input type="text" name="name"><br/>
Комментарий:<br/>
<textarea name="text" id="text" cols="30" rows="10"></textarea>
<!--<input type="hidden" name="_method" value="PUT">-->
<br/>
<input type="submit" value="Добавить">
</form>
Не в сети
Версия Laravel Framework 5.4.36
Версия PHP 7.1.22
Windows 7 x64
Просто мистика какая-то. Вчера все было ок. Хотя, не совсем, редко, но появлялась ошибка Ошибка TokenMismatchException in VerifyCsrfToken.php line 68 и как у Vladimir_user после обновления страницы все становилось ок. Сегодня, при нажатии кнопки в любой форме любого вида любой модели появляется эта ошибка!
Куки включены, мета тег в шапке html файла есть, подключен Collective\Html\HtmlServiceProvider и он генерирует токен в форме в виде скрытого input, прописывал даже {{ csrf_field() }}, в просмотре кода видно что есть два поля
<input name="_token" type="hidden" value="7Sy8yPBr2ECAVKFtgMpYNZurYi4hv5tz3RM4d3aU">
Не помогло и исключить URI из-под CSRF-защиты
Вид (создание категории)
<div class="box">
{!! Form::open(['route' => 'categories.store']) !!}
{{ csrf_field() }}
<div class="box-header with-border">
<h3 class="box-title">Добавить новую категорию</h3>
</div>
@include('admin.errors')
<div class="box-body">
<div class="col-md-6">
<div class="form-group">
<label for="exampleInputEmail1">Название</label>
<input type="text" class="form-control" id="exampleInputEmail1" placeholder="" name="title" value="{{old('title')}}">
</div>
</div>
</div>
<!-- /.box-body -->
<div class="box-footer box-footer-border-top">
<!-- <button class="btn btn-default">Назад</button>-->
<button class="btn btn-success pull-right">Добавить</button>
</div>
<!-- /.box-footer-->
{!! Form::close() !!}
</div>
Роуты
Route::post('admin/products/create', 'Admin\ProductsController@list')->name('products.list');
Route::group(['prefix'=>'admin', 'namespace' => 'Admin'], function(){
Route::get('/', 'DashBoardController@index');
Route::resource('/categories', 'CategoriesController');
Route::resource('/subcategories', 'SubcategoriesController');
Route::resource('/tags', 'TagsController');
//Route::resource('/users', 'UsersController');
Route::resource('/products', 'ProductsController');
Route::resource('/brands', 'BrandsController');
Route::resource('/linemodels', 'LineModelsController');
});
Модель
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Cviebrock\EloquentSluggable\Sluggable;
class Category extends Model
{
use Sluggable;
protected $fillable = ['title'];
public function products()
{
return $this->hasMany(Product::class);
}
public function subcategories()
{
return $this->hasMany(SubCategory::class);
}
public function brands()
{
return $this->hasMany(Brand::class);
}
public function linemodel()
{
return $this->hasMany(Linemodel::class);
}
public function sluggable()
{
return [
'slug'=> [
'source'=>'title'
]
];
}
}
Контроллер
<?php
namespace App\Http\Controllers\Admin;
use Validator;
use App\Category;
use App\Http\Controllers\Controller;
use App\Http\Requests\CategoryRequest;
use Illuminate\Http\Request;
use Illuminate\Foundation\Http\FormRequest;
class CategoriesController extends Controller
{
public function index()
{
$categories = Category::all();
return view('admin.categories.index',
[
'categories' => $categories,
]);
}
public function create()
{
return view('admin.categories.create');
}
//public function store(Request $request)
public function store(CategoryRequest $request)
{
return redirect()->route('categories.create');
}
public function edit($id)
{
$category = Category::find($id);
return view('admin.categories.edit', [
'category' => $category,
]);
}
public function update(CategoryRequest $request, $id)
{
$category = Category::find($id);
$category->update($request->all());
return redirect()->route('categories.index');
}
public function destroy($id)
{
$category = Category::find($id);
if($category->subcategories->isEmpty())
{
$category->delete();
return redirect()->route('categories.index');
}
return redirect()->route('categories.index')->with('message','Нельзя удалить! Категория ' . $category->title . ' содержит подкатегории!');
}
}
Прошу помощи. Если есть необходимость, могу выставить на диск весь проект.
Не в сети