我正在字符串修复我的表单,所以它使用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');
}
您的验证没有按预期工作,这似乎是由于表单字段名称和验证键之间的大小写问题。
在您的表单中,您有City
和Country
,但您的验证正试图针对抛出错误的city
和country
进行验证,但由于您的视图使用了大写字母,因此不会显示验证错误。address
也有拼写错误,但拼写错误至少是一致的。
使您的City
和Country
字段名称小写:
<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();