我有两个控制器,我尝试将一个控制器的可变形式方法的ID传递给第二个控制器的方法,并且出现类似> MethodNotAllowedHttpException的错误。操作结束后,我将添加我的网址,如下所示:> http://localhost/comment?12。解决这个问题的最好方法是什么?
答案 0 :(得分:0)
您很有可能会使用MethodNotAllowedException
,因为您正在通过POST
或相反的方式打开一条定义为GET
的路线。
为避免这种情况,您可以使用php artisan route:list
并获取所有已定义路由的列表,并查看如何“访问”它们:
+--------+-----------+----------------------------------------------------+------------------------+------------------------------------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+----------------------------------------------------+------------------------+------------------------------------------------------------------------+--------------+
| | GET|HEAD | /a/show/{id} | | App\Http\Controllers\AController@show | web |
| | GET|HEAD | /b/show/{id} | | App\Http\Controllers\BController@show | web |
因此,假设您有2个控制器:AController
和BController
。每个控制器中都声明了一个show()
方法。
class AController extends Controller {
//... other AController related code
public function show($id) {
dd($id);
}
}
class BController extends Controller {
//... other BController related code
public function show($id) {
dd($id);
}
}
然后,您可以按以下方式定义路线:
Route::get('/a/show/{id}', 'AController@show');
诸如example.com /a/show/10
之类的链接将“加载” AController
的{{1}}方法。我们在show()
方法主体中拥有的全部是AController::show()
上的dump and die,如果访问该链接,我们将显示 10 。
我们可以将$id
替换为:
dd($id);
并定义另一条路线:
redirect()->action('BController@show', ['id' => $id]);
这样,如果我们打开上一个链接:example.com/a/show/10,我们将被重定向到:example.com Route::get('/b/show/{id}', 'BController@show');
,/b/show/10
方法将被执行并打印变量使用dump and die。
要点: