【问题标题】:Facade\Ignition\Exceptions\ViewException Missing required parameters for [Route: trainingcategories.update]Facade\Ignition\Exceptions\ViewException 缺少 [Route: trainingcategories.update] 所需的参数
【发布时间】:2020-05-10 08:10:21
【问题描述】:

可以找出问题是模型没有返回任何数据,我检查了控制器、视图、路由,一切似乎都正常。

    public function edit(TrainingCategory $trainingCategory)
    {
        return view('admin.trainingcategories.edit')->with(['trainingcategory'=>$trainingCategory]);
    }

这是我的控制器方法,$trainingCategory 没有从数据库返回所需的数据。

Route::prefix('admin')->middleware('is_admin')->group(function () {
    Route::get('/dashboard', 'HomeController@adminHome')->name('admin.home');
    Route::resource('positions', 'PositionsController');
    Route::resource('departments', 'DepartmentsController');
    Route::resource('trainings', 'TrainingsController');
    Route::resource('trainingcategories', 'TrainingCategoriesController');
    Route::get('/trainingcategories/{id}/{action}', 'TrainingCategoriesController@changestatus')->name('trainingcategories.status');
});

这是显示代码的路线文件

@extends('layouts.admin')
@section('content')
<div class="app-main__inner">
    <div class="app-page-title">
        <div class="page-title-wrapper">
            <div class="page-title-heading">
                <div class="page-title-icon">
                    <i class="pe-7s-user icon-gradient bg-mean-fruit">
                    </i>
                </div>
                <div>Edit Training Category
                    <div class="page-title-subheading">Modify.
                    </div>
                </div> 
            </div>
            <div class="page-title-actions">

                <div class="d-inline-block dropdown">
                    <a href="{{ route('trainingcategories.create') }}" type="button"  class="btn-shadow  btn btn-info">

                        Create New Training Category
                        <span class="btn-icon-wrapper pr-2 opacity-7">

                        </span>
                    </a>
                    <a href="{{ route('trainingcategories.index') }}" type="button"  class="btn-shadow  btn btn-primary">

                        List  Training Categories
                        <span class="btn-icon-wrapper pr-2 opacity-7">
                            <i class="fa fa-arrow-right fa-w-20"></i>
                        </span>
                    </a>

                </div>
            </div>
                </div>
    </div>            
   <!--Data table section-->

   <div class="row">
       <div class="col-md-12">

        <nav class="" aria-label="breadcrumb">
            <ol class="breadcrumb">
                <li class="breadcrumb-item"><a href="{{ route('admin.home') }}">Dashboard</a></li>
            <li class="breadcrumb-item"><a href="{{ route('trainingcategories.index') }}">Training Category</a></li>
                <li class="active breadcrumb-item" aria-current="page">Edit Training Category</li>
            </ol>
        </nav>
           <!--alerts-->
           @if(!empty($errors->all()) )

                          <div class="alert alert-danger fade show" role="alert">
                              @foreach ($errors->all() as $error)
                                      <li>{{ $error }}</li>     
                              @endforeach
                          </div>
            @endif
            <!--end alerts--> 
        <div class="main-card mb-3 card">
        <div class="card-body"><h3 class="h4">Edit Training Category > <b>{{ $trainingcategory->name }}</b><br>
                <small class="muted">Modify</small></h3>
                <hr>
                <form class="needs-validation" novalidate method="POST" action="{{ route('trainingcategories.update',['trainingcategory'=>$trainingcategory->id]) }}">
                    @csrf
                    @method('PUT')
                        <div class="department-relative form-group">
                            <label for="name" class="">Name</label>
                                <input name="name" id="name" placeholder="Enter training category" type="text" class="form-control" 
                                value="{{ old('name',$trainingcategory->name) }}" required>
                                <div class="valid-feedback">
                                    Looks good!
                                </div>
                                <div class="invalid-feedback">
                                    Please enter training category.
                                </div>
                            </div>
                        <div class="department-relative form-group">
                            <label for="description" class="">Active<i class="muted"></i></label>
                            @include('includes._active_select')
                            </div>
                        <div class="department-relative form-group">
                            <label for="description" class="">Training Description<i class="muted">(Optional)</i></label>
                            <textarea name="description" id="description" class="form-control" required> {{ old('description',$trainingcategory->description) }} </textarea>
                            <div class="valid-feedback">
                                Looks good!
                            </div>
                            <div class="invalid-feedback">
                                Please enter training description.
                            </div>
                        </div>
                        <button class="mt-1 btn btn-primary">update</button>
                    </form>
                </div>

        </div>
</div>
</div>
     <!-- form validation-->
<script>
// Example starter JavaScript for disabling form submissions if there are invalid fields
(function() {
'use strict';
window.addEventListener('load', function() {
// Fetch all the forms we want to apply custom Bootstrap validation styles to
var forms = document.getElementsByClassName('needs-validation');
// Loop over them and prevent submission
var validation = Array.prototype.filter.call(forms, function(form) {
form.addEventListener('submit', function(event) {
    if (form.checkValidity() === false) {
        event.preventDefault();
        event.stopPropagation();
    }
    form.classList.add('was-validated');
}, false);
});
}, false);
})();
</script>
   <!--end data table section-->


</div>

@endsection

这是我的看法

【问题讨论】:

  • 您还没有包含您实际调用route('trainingcategories.update') 的代码 - 您可以包含它吗?
  • 在我看来这里是&lt;form class="needs-validation" novalidate method="POST" action="{{ route('trainingcategories.update',['trainingcategory'=&gt;$trainingcategory-&gt;id]) }}"&gt;
  • call php artisan route:list 找到路线 trainingcategories.update 并查看您缺少的路线参数的名称,显然与命名有些不同。我猜它不知道如何从复数到单数,当你没有驼峰训练类别时。
  • 刚刚测试了我的评论,命名似乎没问题,但仍然尝试运行 php artisan route:list 看看发生了什么
  • 我这里做的是我的路由列表sn-p`|放|补丁|管理员/培训类别/{培训类别} | trainingcategories.update | App\Http\Controllers\TrainingCategoriesController@update |网络,is_admin `

标签: php laravel view model controller


【解决方案1】:

伙计们,我终于通过将变量名 trainingCategory 更改为 $trainingcategory(注意小写的“c”,与资源路由命名匹配)弄清楚了。所以资源从数据库返回数据。

Laravel 自动解析定义在路由或控制器操作中的类型提示模型,其变量名称与路由段名称匹配。

【讨论】:

  • 你是对的!我将更改方法参数的名称改为 Category 而不是 productCategory 以具有相同的命名,例如 route:list 结果 { }=> product/categories/{category}
【解决方案2】:

该错误与 [Route: trainingcategories.update] 有关。 当你这样做时:

Route::resource('trainingcategories','TrainingCategoriesController');

您生成这条路线:trainingcategories.update 正在 TrainingCategoriesController 的更新方法中等待 $trainingcategories 参数。

像这样:

public function update(TrainingCategory $trainingCategory)

所以,您需要查看更新方法。编辑方法不愧疚。

【讨论】:

  • 我还没有提交表格
【解决方案3】:

您已经证明这是生成路线的方式:

route('trainingcategories.update',['trainingcategory'=>$trainingcategory->id])

关联数组不需要传入,模型传入即可。

route('trainingcategories.update', $trainingcategory)

确保$traningcategory 确实存在并且ID 属性不为空。 Laravel 抱怨它没有得到所需的参数。

【讨论】:

  • id不为null,但是模型$trainingCategory在`public function edit(TrainingCategory $trainingCategory) { return view('admin.trainingcategories.edit')->with(['trainingcategory)中返回null '=>$trainingCategory]); }`
  • 这是我对表的迁移public function up() $table->increments('id'); $table->string('name'); $table->text('description')->nullable(); $table->tinyinteger('active')->default('1'); $table->timestamps();`
猜你喜欢
  • 1970-01-01
  • 2020-10-17
  • 2020-04-23
  • 2020-08-09
  • 2020-09-07
  • 2020-09-24
  • 2023-04-01
  • 2020-09-17
  • 2020-08-20
相关资源
最近更新 更多