【问题标题】:Laravel route redirect to wrong methodLaravel 路由重定向到错误的方法
【发布时间】:2020-02-12 15:09:52
【问题描述】:

我第一次遇到 laravel 5 (5.8.35) 中的路由问题。

我有一个向/client/ban 发出帖子请求的表单

<div class="text-center">
  <form action="/client/ban" method="post">
    {{ csrf_field() }}
    Token:<br>
    <label>
      <input type="text" name="token">
    </label>
    <button type="submit" name="ban" value="1">Ban</button>
    <button type="submit" name="ban" value="0">Pardon</button>
  </form>
</div>

我的路线在这里,它应该将我的 /client/ban 请求重定向到 action_ban_req 方法。

Route::post('/client/ban', 'HomeController@action_ban_req');
Route::post('/client/new', 'HomeController@action_new_req');

这是我的两个方法,在HomeController.php 文件中,出于调试目的,有一个非常简单的内容(它包含在自己的路由上工作的其他方法);

public function action_ban_req(Request $request)
{
    return "Test BAN";
}

public function action_new_req(Request $request)
{
    return "Test NEW";
}

但是,每次我发出请求时,参数都会发送到/client/ban,但它会返回“Test NEW”。我也尝试过这条路线:

Route::post('/client/ban', function () { return 'Test'; });

即使这样,也没有区别,我仍然坚持“测试新”响应。

我错过了什么吗?

编辑:当我交换路由顺序时没有任何变化,我的其他带有 /client 前缀的路由(具有其他形式)工作正常。

【问题讨论】:

  • 你还有其他带有/client前缀的路由吗?
  • 切换路由顺序会发生什么?
  • 我试过了,路线的顺序似乎没有改变结果。此外,我几乎没有其他带有 /client 前缀的路由(以及它们的 html 格式)。
  • 首先,composer dump-autoload。然后,检查php artisan route:list 是否显示两条路径。
  • 看来我的旧路线已经不存在了。我相信它肯定被缓存在某个地方。编辑:哦,谢谢老兄,我用php artisan route:cache解决了它

标签: php laravel redirect methods routes


【解决方案1】:

不确定您在项目中的进展情况,但失败的路线可能默认为action_new_req。或者,可能有另一条路线可以捕获您要发送的内容。根据您网站的设置方式,问题可能在于您没有向 POST 方法发送正确的 URL。

试试这个:

<form action="{{url('/client/ban')}}" method="post">

如果路线没有得到正确的基础(例如http://yoursite/client/ban),这应该可以解决。

【讨论】:

  • 同样的结果:url是好的,是方法重定向不对。
【解决方案2】:

格拉斯蒂斯。

我认为您不能使用相同的表单发送多个操作。 Web.php 进行第一场比赛。 但是您可以检查按钮点击的控制器。

public function ban(Request $request){
switch ($request->input('action')) {
    case '0':
        // Case bam
        break;

    case '1':
        // Case Pardon
        break;
}}

<button type="submit" name="action" value="0">Ban</button>
<button type="submit" name="action" value="1">Pardon</button>

【讨论】:

  • 你可以。我正在使用其他控制器在其他视图中执行此操作,并且工作正常。
  • 如果你使用动作助手?
  • 我找到了,这是由于 laravel 不在 web.php 文件中,而是在其缓存的路由中。但是谢谢 :)
【解决方案3】:

感谢 Jeff Harris,我发现了问题。

正如他所说,我执行了:

composer dump-autoload && php artisan route:list

我得到了一些不应该存在的旧路由,以及一些重定向到错误控制器的路由,然后问题是即使编辑了 routes/web.php 文件,laravel 也没有更新其路由缓存,我不知道为什么。

我必须使用以下内容清除缓存:

php artisan route:cache

然后php artisan route:list 列出了重定向到权限方法的路由。

【讨论】:

  • Heh route:cache 当我有一些旧的东西错误地捕捉到路线时,也会一直让我着迷。很高兴你解决了。
  • 是的,我认为这是一个“菜鸟”问题,但(我可能很幸运)我已经使用 laravel 3 年了,这是我第一次得到这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 2020-05-26
  • 2017-05-12
  • 2021-12-17
  • 2017-06-19
  • 2021-04-26
相关资源
最近更新 更多