【问题标题】:Laravel named route not defined when it isLaravel 命名路由未定义
【发布时间】:2020-03-20 12:52:59
【问题描述】:

我正在做一个用户可以授权或拒绝askedRapport 的表单。 这里是:

askRapportShow.blade.php刀片视图:

<form action="{{route('authorize', $askedRapport->id)}}" method="POST">
    <div class="form-group">
      <textarea class="form-control" placeholder="Message"></textarea> <br>
      <button type="submit" formaction="{{route('authorize', $askedRapport->id)}}" class="btn btn-success">Autoriser</button>
      <button type="submit" formaction="{{route('refuse', $askedRapport->id)}}" class="btn btn-danger">Refuser</button>
    </div>
</form>

在路由定义的web.php 文件中:

// RAPPORT ASKING MANAGEMENT
Route::post('askedRapport/{id}', 'manageAskedRapportController@authorize')->name('authorize');
Route::post('askedRapport/{id}', 'manageAskedRapportController@refuse')->name('refuse');
// RAPPORT ASKING MANAGEMENT--END

和控制器manageAskedRapportController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class manageAskedRapportController extends Controller
{

    public function authorize($id){
        return view('welcome');
    }

    public function refuse($id){
        return view('unauthorized');
    }
}

虽然我认为路线定义明确,但我仍然收到此错误:

有人知道我为什么会遇到这个问题吗?非常欢迎任何帮助

编辑

如果这有帮助,当我输入 php artisan route:list 命令时,我会得到:

   ErrorException  : Declaration of App\Http\Controllers\manageAskedRapportController::authorize($id) should be compatible with App\Http\Controllers\Controller::authorize($ability, $arguments = Array)

  at C:\xampp\htdocs\monapp\app\Http\Controllers\manageAskedRapportController.php:17
    13|
    14|     public function refuse($id){
    15|         return view('unauthorized');
    16|     }
  > 17| }
    18|

  Exception trace:

  1   Illuminate\Foundation\Bootstrap\HandleExceptions::handleError("Declaration of App\Http\Controllers\manageAskedRapportController::authorize($id) should be compatible with App\Http\Controllers\Controller::authorize($ability, $arguments = Array)", "C:\xampp\htdocs\monapp\app\Http\Controllers\manageAskedRapportController.php", ["C:\xampp\htdocs\monapp\vendor\composer/../../app\Http\Controllers\manageAskedRapportController.php"])
      C:\xampp\htdocs\monapp\vendor\composer\ClassLoader.php:444

  2   include()
      C:\xampp\htdocs\monapp\vendor\composer\ClassLoader.php:444

  Please use the argument -v to see more details.

【问题讨论】:

  • 你能发布php artisan route:list的结果吗
  • 为什么你使用相同的路线两次?
  • refuse 总是覆盖 authorize 路由,因为 url 是相同的。
  • @JitheshJose,嗯,有问题吗?只要是不同的动作,不就是点击相应按钮的时候直接去控制器中提到的功能吗?我可能错了
  • 不,你不能在不同的路由中使用相同的 url。

标签: php laravel routes


【解决方案1】:

更改路线并尝试。我认为第二条路线会覆盖第一条路线。所以当您尝试使用第一条路线时,laravel 可能会显示route not found exception

Route::post('askedRapport/{id}/authorize', 'manageAskedRapportController@authorize')->name('authorize');
Route::post('askedRapport/{id}/refuse', 'manageAskedRapportController@refuse')->name('refuse');

【讨论】:

    【解决方案2】:

    表单动作路径定义为

    <form action="{{route('authorize'), [$askedRapport->id] }}" method="POST">
    

    【讨论】:

    • {{route('authorize'), [$askedRapport-&gt;id] }}{{route('authorize'), $askedRapport-&gt;id }} 相同。
    【解决方案3】:

    我认为你的问题出在斜线/

    尝试像这样定义路线:

    Route::post('/askedRapport/{id}', 'manageAskedRapportController@authorize')->name('authorize');
    Route::post('/askedRapport/{id}', 'manageAskedRapportController@refuse')->name('refuse');
    

    【讨论】:

      猜你喜欢
      • 2021-03-28
      • 2019-12-12
      • 2018-06-30
      • 2018-12-16
      • 2020-01-11
      • 2020-02-06
      • 2015-01-16
      • 2019-05-03
      相关资源
      最近更新 更多