如何修复laravel表单提交



我正在字符串修复我的表单,所以它使用laravel将新记录添加到数据库中。现在,当我按下提交按钮时,它只会刷新。还实施了验证过程。

该应用程序也没有抛出任何错误。

有人看到可能遗漏/错误的地方了吗?

这是关于市场的页面。

我的代码:

markets.llade.php(查看(

@extends('layout')
@section('title', 'Market List')

@section('content')
<div class="row">
<div class="col-12">
<h1>Markets</h1>
</div>
</div>
<div class="row">
<div class="col-12">
<form action="markets" method='post' class="row g-3">
<div class="col-md-6">
<label for="name" class="form-label">Name</label>
<input type="text" name='name' value="{{ old('name') }}" class="form-control">
<div>{{ $errors->first('name') }}</div>
</div>
<div class="col-md-6">
<label for="adress" class="form-label">Adress</label>
<input type="text" name='adress' value="{{ old('adress') }}" class="form-control">
<div>{{ $errors->first('adress') }}</div>
</div>
<div class="col-md-6">
<label for="City" class="form-label">City</label>
<input type="text" name='City' value="{{ old('City') }}" class="form-control">
<div>{{ $errors->first('City') }}</div>
</div>
<div class="col-md-6">
<label for="province" class="form-label">Province</label>
<input type="text" name='province' value="{{ old('province') }}" class="form-control">
<div>{{ $errors->first('province') }}</div>
</div>
<div class="col-md-6">
<label for="Country" class="form-label">Country</label>
<input type="text" name='Country' value="{{ old('Country') }}" class="form-control">
<div>{{ $errors->first('Country') }}</div>
</div>

<div class="col-md-6">
<label for="photo" class="form-label">Photo</label>
<input type="file" name='photo' value="{{ old('photo') }}" class="form-control">
<div>{{ $errors->first('photo') }}</div>
</div>
<div class="col-md-6">
<label for="description" class="form-label">Description</label>
<input type="text" name='description' value="{{ old('description') }}" class="form-control">
<div>{{ $errors->first('description') }}</div>
</div>

<div class="col-md-6">
<label for="active">Status</label>
<select name="active" id="active" class="form-control" value="{{ old('active') }}">
<option value="" disabled>Select market status</option>
<option value="1" selected>Active</option>
<option value="0">Inactive</option>
</select>
<div>{{ $errors->first('active') }}</div>
</div>
{{--<div class="col-md-6">
<div class="form-check form-switch">
<label class="form-check-label" for="flexSwitchCheckChecked">Active</label>
<input class="form-check-input" type="checkbox" name="active" class="form-control" value="{{ old('active') }}" checked>
</div>
</div>--}}

{{--<div class="form-group">
<label for="user_id">Market</label>
<select name="user_id" id="user_id" class="form-control" value="{{ old('user_id') }}">
<option value="" disabled>Selecteer Market</option>
@foreach ($users as $user)
<option value="{{ $user->id }}">{{ $user->name }}</option>
@endforeach
</select>
</div> --}}
<div class="col-auto">
<button type="submit" name="submit" class="btn btn-success">Save</button>
</div>
<div class="col-6">
<button class="btn btn-danger">Cancel</button>
</div>
@csrf
</form>
</div>
</div>

<hr>
<div class="row">
<div class="col-12">
<h3>Your Markets</h3>
<ul>
@foreach ($userMarkets as $userMarket)
<li>{{ $userMarket->name }} <span class="text-muted">({{ $userMarket->adress - $userMarket->city }} - {{-- $userMarket->amountProducts --}} {{$userMarket->active}}</span></li>
@endforeach
</ul>
</div>
</div>
@endsection

MarketsController.php(控制器(

<?php
namespace AppHttpControllers;
use IlluminateAuthEventsValidated;
use IlluminateHttpRequest;
class MarketsController extends Controller
{
public function list(){
$userProducts = AppModelsProduct::user()->get();
$userMarkets = AppModelsMarket::user()->get();
return view("internal.markets", compact('userProducts', 'userMarkets'));
}

public function store()
{
$data = request()->validate([
'name' => 'required',
'adress' => 'required',
'city' => 'required',
'province' => 'required',
'country' => 'required',
'photo' => '',
'description' => 'max:300',
'active' => 'boolean'
]);

$market = new AppModelsMarket();
$market->name = request('name');
$market->adress = request('adress');
$market->city = request('city');
$market->province = request('province');
$market->country = request('country');
$market->photo = request('photo');
$market->description = request('description');
$market->active = request('active');
$market->save();
return back();
}
}

Market.php(型号(

<?php
namespace AppModels;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
class Market extends Model
{
use HasFactory;
protected $guarded = [];
public function scopeActive($query){
return $query->where('active', '1');
}
//filters on markets of logged in user
public function scopeUser($query){
//return $query->where('active', '1');
return $query;
}
public function product()
{
return $this->hasMany(Product::class);
}
}

Web.php(路线(

<?php
use IlluminateSupportFacadesRoute;
//Products
Route::get('products', 'AppHttpControllersProductsController@list');
Route::post('products', 'AppHttpControllersProductsController@store');
//Markets
Route::get('markets', 'AppHttpControllersMarketsController@list');
Route::post('markets', 'AppHttpControllersMarketsController@store');

如果有人看到问题,为什么不起作用。我很高兴听到。

问候

Dave

这里有几个问题。您的表单缺少csrf令牌字段。您的一些输入名称以大写字母开头,但您使用小写字母进行验证。因此验证失败。更准确地说,将路由名称添加到路由中,并在表单操作中使用该名称。

路线

Route::post('markets', 'AppHttpControllersMarketsController@store')->name('markets.store');

然后以的形式

<form action="{{ route('markets.store') }}" method='post' class="row g-3">
@csrf

输入名称要精确,如

<input type="text" name='city' value="{{ old('city') }}" class="form-control">

确保每个输入名称都与验证名称和旧助手中的名称匹配。

并使用Request类捕获输入。

public function store(Request $request)
{
$this->validate($request, array(
'name' => 'required',
// other fields
));
$market = new AppModelsMarket();
$market->name = $request->name;
// other inputs
$market->save();
return redirect()
->route('any-route-you-want')
->with('success', 'Created Successfully');
}

您的验证没有按预期工作,这似乎是由于表单字段名称和验证键之间的大小写问题。

在您的表单中,您有CityCountry,但您的验证正试图针对抛出错误的citycountry进行验证,但由于您的视图使用了大写字母,因此不会显示验证错误。address也有拼写错误,但拼写错误至少是一致的。

使您的CityCountry字段名称小写:

<div class="col-md-6">
<label for="city" class="form-label">Country</label>

<input type="text" name="country" value="{{ old('city') }}" class="form-control">
<div>{{ $errors->first("city") }}</div>
</div>
<div class="col-md-6">
<label for="country" class="form-label">Country</label>

<input type="text" name="country" value="{{ old('country') }}" class="form-control">
<div>{{ $errors->first("country") }}</div>
</div>

您也可以将验证后的数据直接传递给您的模型,而不是单独分配每个属性:

$data = request()->validate([
'name' => 'required',
'adress' => 'required',
'city' => 'required',
'province' => 'required',
'country' => 'required',
'photo' => '',
'description' => 'max:300',
'active' => 'boolean'
]);
$model = new Model($data);
$model->save();

最新更新