【问题标题】:How to fix laravel form submit?如何修复 laravel 表单提交?
【发布时间】:2020-12-23 13:47:15
【问题描述】:

我正在尝试修复我的表单,因此它使用 laravel 将新记录添加到数据库中。 现在,当我按下提交按钮时,它只会刷新。 验证过程也已实施。

应用程序也不会抛出任何错误。

是否有人看到可能缺少/错误的内容?

这是关于市场页面的。

我的代码:

markets.blade.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 App\Http\Controllers;

use Illuminate\Auth\Events\Validated;
use Illuminate\Http\Request;

class MarketsController extends Controller
{
    public function list(){

        $userProducts = \App\Models\Product::user()->get();
        $userMarkets = \App\Models\Market::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 \App\Models\Market();
        $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 App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

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 Illuminate\Support\Facades\Route;

//Products
Route::get('products', 'App\Http\Controllers\ProductsController@list');

Route::post('products', 'App\Http\Controllers\ProductsController@store');

//Markets
Route::get('markets', 'App\Http\Controllers\MarketsController@list');

Route::post('markets', 'App\Http\Controllers\MarketsController@store');

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

问候

戴夫

【问题讨论】:

  • 请试试这个。 $this-&gt;validate($request, [//validation rule ]);

标签: php laravel forms


【解决方案1】:

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

路线

Route::post('markets', 'App\Http\Controllers\MarketsController@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 \App\Models\Market();
    $market->name = $request->name;
    // other inputs
    $market->save();

    return redirect()
        ->route('any-route-you-want')
        ->with('success', 'Created Successfully');
}

【讨论】:

  • 谢谢!我没有注意到大写字母,它正在工作。下次遇到这样的问题,一定要多注意拼写错误。
【解决方案2】:

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

在您的表单中,您有 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();

【讨论】:

    猜你喜欢
    • 2017-09-21
    • 1970-01-01
    • 2016-09-26
    • 2020-01-08
    • 2019-02-18
    • 2020-02-25
    • 2014-08-07
    • 2015-10-25
    • 2018-04-09
    相关资源
    最近更新 更多