forms - Laravel 5.0 路由模型绑定(bind)在销毁操作中不起作用

标签 forms laravel laravel-5 laravel-routing laravel-form

我有一个带有一个提交按钮的表单,并将操作设置为 Controller 中的销毁方法。相同的代码适用于其他表单和 Controller ,但不适用于此表单和 Controller 。当我在 Chrome 中检查网页时,表单标记中的操作是错误的。

这是我的表格:

{!! Form::model($company, ['method' => 'PATCH', 'action' => ['Setting\Organization\CompaniesController@update', 'files'=>true, $company->CompanyCode]]) !!}
    <div class="form-group">
        {!! Form::label('CompanyCode', 'Company Code : ', ['class' => 'col-lg-3 col-md-3 col-sm-3 col-xs-3']) !!}
        <div class="col-lg-9 col-md-9 col-sm-9 col-xs-9">
            {!! Form::text('CompanyCode', null, ['class' => 'form-control', 'readonly' => true]) !!}
        </div>
    </div>

    <div class="col-lg-2 col-md-2 col-sm-2 col-xs-2">
        {!! Form::submit('Update Company', ['class' => 'btn btn-primary', 'id' => 'btnSubmit']) !!}
    </div>

{!! Form::close() !!}

{!! Form::model($company, ['method' => 'DELETE', 'action' => 'Setting\Organization\CompaniesController@destroy', $company->CompanyCode]) !!}

    <div class="col-lg-2 col-md-2 col-sm-2 col-xs-2">
        {!! Form::submit('Delete Company', ['class' => 'btn btn-danger']) !!}
    </div>

{!! Form::close() !!}

“更新”按钮工作正常。

我通过Setting\Organization\CompaniesController中的编辑方法访问此表单:

public function edit(Company $company){
    return view('setting.organization.company.edit', compact('company'));
}

这是Setting\Organization\CompaniesController 中的destroy 方法:

public function destroy(Company $company){
    dd($company);
    //------------ delete company
    $company->IsActive = 0;
    $company->update();

    flash()->info('Company ' . $company->Name . ' has been deleted.');
    return redirect('company');
}

dd($company); 行甚至不起作用,因为表单没有链接到正确的路由。

RouteServiceProvider 文件:

public function boot(Router $router)
{
    parent::boot($router);

    $router->bind('client', function($id){
        return \App\Models\Setting\ClientAccount::getClientFromAccountName($id);
    });

    $router->bind('company', function($id){
        return Company::getCompanyFromCode($id);
    });

}

.

.

这是表单的检查元素:

<form method="POST" action="http://localhost/hrmsystem/public/company/%7Bcompany%7D" accept-charset="UTF-8" com160202145801="COM160202145801">
<input name="_method" type="hidden" value="DELETE">
<input name="_token" type="hidden" value="B2luMsN5Oy81GUFLoUCoHc2ERnqHe1AYir1DEY4N">

    <div class="col-lg-2 col-md-2 col-sm-2 col-xs-2">
        <input class="btn btn-danger" type="submit" value="Delete Company">
    </div>

</form>

.

.

提交表格后:

Error after submitting the form

据我所知,错误是 ModelNotFoundException,因为传递的 CompanyCode 是 %7Bcompany%7D。但我不知道它从哪里来。

我在routes.php中使用Route::resource

请帮忙,我是 Laravel 新手。

最佳答案

嘿,这取决于你的路由 如果您使用 Route::resource('companies','CompaniesController'); 这对您来说很容易,无需麻烦,只需您可以像这样使用按钮

 {!! Form::open(array('class' => 'form-inline', 'method' => 'DELETE', 'route' => array('companies.destroy',  $company->CompanyCode))) !!}
                                {!! Form::submit('DELETE', array('class' => 'btn btn-danger btn-xs')) !!}
                                {!! Form::close() !!}

如果你想使用你的方式,那么你必须像这样使用你的表单

{!! Form::open('method' => 'DELETE', 'action' => ['Setting\Organization\CompaniesController@destroy', $company->CompanyCode]) !!}
    <div class="col-lg-2 col-md-2 col-sm-2 col-xs-2">
        {!! Form::submit('Delete Company', ['class' => 'btn btn-danger']) !!}
    </div>
{!! Form::close() !!}

关于forms - Laravel 5.0 路由模型绑定(bind)在销毁操作中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35161492/

相关文章:

php - 使用 Laravel eloquent 搜索数据库列中的值是否出现在搜索字符串中

python - Bottle 框架中的多种路线和功能

javascript - Ajax 表单无法使用 event.preventDefault() 阻止页面重新加载;

php - 表单方法 - GET 工作但 POST 不工作

php - 如何在 PHP 或 Laravel 中访问 JsonResponse 对象中的属性值?

php - 为什么::class 附加到 Laravel 5.1 中的 PHP 类

php - 如何获取 curl POST 数据?

forms - 什么时候应该使用 GET 或 POST 方法?它们之间有什么区别?

php - 如何根据另外两个表的计算从一个表中检索数据?

Laravel Blade - 屈服内部部分