laravel 5.7如何将一个控制器的变量id传递给另一个

时间:2018-12-25 13:06:12

标签: php laravel

我有两个控制器,我尝试将一个控制器的可变形式方法的ID传递给第二个控制器的方法,并且出现类似> MethodNotAllowedHttpException的错误。操作结束后,我将添加我的网址,如下所示:> http://localhost/comment?12。解决这个问题的最好方法是什么?

1 个答案:

答案 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个控制器:AControllerBController。每个控制器中都声明了一个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

要点: