【问题标题】:Laravel5.6 - route unwantedLaravel5.6 - 路由不需要
【发布时间】:2018-12-06 04:45:50
【问题描述】:

我的 EmployeeCONtroller 的视图 edit.blade 有问题。

Edit.blade.php

 <form method="PUT" action="{{ route('employees.update', $employee_detail->id) }}" aria-label="{{ __('Edit') }}" enctype="multipart/form-data">

web.php

Route::patch('/employee/{id}', 'EmployeeController@update')->name('employees.update');
Route::get('/employee/{id}', 'EmployeeController@destroy')->name('employees.delete');

员工控制器

public function update(Request $request, $id)

我不知道为什么,但是我的控制器上的 destroy() 函数的请求!!

我已经完成了 php artisan route:list

+--------+----------+-------------------------------------+--------------------------------+------------------------------------------------------------------------+----------------------------------------------+
| Domain | Method   | URI                                 | Name                           | Action                                                                 | Middleware                                   |
+--------+----------+-------------------------------------+--------------------------------+------------------------------------------------------------------------+----------------------------------------------+
|        | GET|HEAD | /                                   |                                | Closure                                                                | web                                          |
|        | GET|HEAD | _debugbar/assets/javascript         | debugbar.assets.js             | Barryvdh\Debugbar\Controllers\AssetController@js                       | Barryvdh\Debugbar\Middleware\DebugbarEnabled |
|        | GET|HEAD | _debugbar/assets/stylesheets        | debugbar.assets.css            | Barryvdh\Debugbar\Controllers\AssetController@css                      | Barryvdh\Debugbar\Middleware\DebugbarEnabled |
|        | DELETE   | _debugbar/cache/{key}/{tags?}       | debugbar.cache.delete          | Barryvdh\Debugbar\Controllers\CacheController@delete                   | Barryvdh\Debugbar\Middleware\DebugbarEnabled |
|        | GET|HEAD | _debugbar/clockwork/{id}            | debugbar.clockwork             | Barryvdh\Debugbar\Controllers\OpenHandlerController@clockwork          | Barryvdh\Debugbar\Middleware\DebugbarEnabled |
|        | GET|HEAD | _debugbar/open                      | debugbar.openhandler           | Barryvdh\Debugbar\Controllers\OpenHandlerController@handle             | Barryvdh\Debugbar\Middleware\DebugbarEnabled |
|        | GET|HEAD | admin                               | admin                          | App\Http\Controllers\Back\AdminController@index                        | web                                          |
|        | GET|HEAD | admin/employee                      | employees.index                | App\Http\Controllers\Back\EmployeeController@index                     | web,auth                                     |
|        | GET|HEAD | admin/employee/create               | employees.create               | App\Http\Controllers\Back\EmployeeController@create                    | web,auth                                     |
|        | POST     | admin/employee/create               | employees.store                | App\Http\Controllers\Back\EmployeeController@store                     | web,auth                                     |
|        | GET|HEAD | admin/employee/show/{id}            | employees.show                 | App\Http\Controllers\Back\EmployeeController@show                      | web,auth                                     |
|        | GET|HEAD | admin/employee/{id}                 | employees.delete               | App\Http\Controllers\Back\EmployeeController@destroy                   | web,auth                                     |
|        | PUT      | admin/employee/{id}                 | employees.update               | App\Http\Controllers\Back\EmployeeController@update                    | web,auth                                     |
|        | POST     | admin/employee/{id}/dossiers/create | create.document.employee.store | App\Http\Controllers\Back\DossierController@dossiers_employees_store   | web                                          |
|        | GET|HEAD | admin/employee/{id}/dossiers/create | create.document.employee.show  | App\Http\Controllers\Back\DossierController@dossiers_employees_create  | web                                          |
|        | GET|HEAD | admin/employee/{id}/edit            | employees.edit                 | App\Http\Controllers\Back\EmployeeController@edit                      | web,auth                                     |
|        | GET|HEAD | admin/entreprise                    | entreprises.index              | App\Http\Controllers\Back\EntrepriseController@index                   | web,auth                                     |
|        | POST     | admin/entreprise/create             | entreprises.store              | App\Http\Controllers\Back\EntrepriseController@store                   | web,auth                                     |
|        | GET|HEAD | admin/entreprise/create             | entreprises.create             | App\Http\Controllers\Back\EntrepriseController@create                  | web,auth                                     |
|        | GET|HEAD | admin/entreprise/show/{id}          | entreprises.show               | App\Http\Controllers\Back\EntrepriseController@show                    | web,auth                                     |
|        | GET|HEAD | api/user                            |                                | Closure                                                                | api,auth:api                                 |
|        | GET|HEAD | home                                | home                           | App\Http\Controllers\HomeController@index                              | web,auth                                     |
|        | POST     | login                               |                                | App\Http\Controllers\Auth\LoginController@login                        | web,guest                                    |
|        | GET|HEAD | login                               | login                          | App\Http\Controllers\Auth\LoginController@showLoginForm                | web,guest                                    |
|        | POST     | logout                              | logout                         | App\Http\Controllers\Auth\LoginController@logout                       | web                                          |
|        | GET|HEAD | logout                              | logout                         | App\Http\Controllers\Auth\LoginController@logout                       | web                                          |
|        | POST     | password/email                      | password.email                 | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail  | web,guest                                    |
|        | GET|HEAD | password/reset                      | password.request               | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web,guest                                    |
|        | POST     | password/reset                      |                                | App\Http\Controllers\Auth\ResetPasswordController@reset                | web,guest                                    |
|        | GET|HEAD | password/reset/{token}              | password.reset                 | App\Http\Controllers\Auth\ResetPasswordController@showResetForm        | web,guest                                    |
|        | GET|HEAD | register                            | register                       | App\Http\Controllers\Auth\RegisterController@showRegistrationForm      | web,guest                                    |
|        | POST     | register                            |                                | App\Http\Controllers\Auth\RegisterController@register                  | web,guest                                    |
+--------+----------+-------------------------------------+--------------------------------+------------------------------------------------------------------------+----------------------------------------------+

和 php artisan route:clear

我也试过了:

  <form method="POST" action="{{ route('employees.update', $employee_detail->id) }}" aria-label="{{ __('Edit') }}" enctype="multipart/form-data">
        @method('PUT')
        @csrf

并让web.php中设计的路由不变。

它仍然没有工作。 继续调度到 destroy() 而不是 update()。

有人有想法吗?

谢谢大家!

【问题讨论】:

    标签: laravel-5 routes


    【解决方案1】:

    这是因为您尝试执行的操作和您期望执行的操作。

    在你的路由文件中试试这个:

    Route::put('/employee/{id}', 'EmployeeController@update')->name('employees.update');
    

    如果您想知道“PUT”和“PATCH”HTTP 动词之间的区别,我添加一个链接:https://williamdurand.fr/2014/02/14/please-do-not-patch-like-an-idiot/

    HTML 表单不支持 PUT、PATCH 或 DELETE 操作。因此,在定义从 HTML 表单调用的 PUT、PATCH 或 DELETE 路由时,您需要向表单添加隐藏的 _method 字段。 _method 字段发送的值将用作 HTTP 请求方法:

    <form action="{{ route('employees.update', $employee_detail->id) }}" method="POST">
        <input type="hidden" name="_method" value="PUT">
    </form>
    

    您可以使用 @method Blade 指令来生成 _method 输入:

    <form action="{{ route('employees.update', $employee_detail->id) }}" method="POST">
        @method('PUT')
    </form>
    

    【讨论】:

    • 感谢您的快速回复。它继续重定向到destroy()。路由 {#131} EmployeeController {#272} “销毁”。
    • 我刚刚想了一下,可能你的路由被缓存了。在你的控制台中探测这个:php artisan route
    • 我已经这样做了:php artisan route:clear and route:list but not working yet
    • 尝试像输入一样发送方法:&lt;form method="PUT" action="{{ route('employees.update', $employee_detail-&gt;id) }}" aria-label="{{ __('Edit') }}" enctype="multipart/form-data"&gt; &lt;input type="hidden" name="_method" value="PUT"&gt; ... &lt;/form&gt;
    • 我想可能是因为“PUT”放在了方法表单中,这里给大家一些laravel相关文档laravel.com/docs/5.6/routing#form-method-spoofing
    【解决方案2】:
     | PUT      | admin/employee/{id}/update          | employees.update               | App\Http\Controllers\Back\EmployeeController@update                    | web,auth 
     | GET|HEAD | admin/employee/{id}/delete          | employees.delete               | App\Http\Controllers\Back\EmployeeController@destroy                   | web,auth                                     |
    

    我已经在我的路线上添加了更新和删除,它现在可以工作了......

    Route::put('/employee/{id}/update', 'EmployeeController@update')->name('employees.update');
    Route::get('/employee/{id}/delete', 'EmployeeController@destroy')->name('employees.delete');
    

    对我来说很奇怪......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-21
      • 2020-09-13
      • 1970-01-01
      • 2019-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多