【问题标题】:Route not found after updating from Laravel 5.7 to 6从 Laravel 5.7 更新到 6 后找不到路由
【发布时间】:2019-12-21 04:06:54
【问题描述】:

我正在尝试将我的应用程序更新到 laravel 6,但不幸的是,我无法让我的溃败再次工作。当前配置给我页面未找到。

这是以前的工作方式:

// generating a link

$content['fan_prize_url'] = route('claim.prize', ['id' => $content['prize_id'], 'u' => $recipient->guid]);
// web.php

    Route::get('claim/{contest_prize}', [
        'as' => 'claim.prize',
        'uses' => 'PrizeController@claimPrize',
    ]);
// PrizeController.php

public function claimPrize(ContestPrize $contest_prize, Request $request)
    {

        if ($contest_prize->contest->is_draft && ! \Auth::check()) {
            abort(404);
        }
    }

更新前的链接是这样的: https://my.app/claim/14?u=be94df30-16aa-11ea-a5de-2bf3d15638e4

更新后 https://my.app/claim/claim?id=14&u=be94df30-16aa-11ea-a5de-2bf3d15638e4

当我把web.php改成这样的时候

Route::get('claim', [
        'as' => 'claim.prize',
        'uses' => 'PrizeController@claimPrize',
    ]);

它让我试图获取非对象的属性。

我错过了什么?我刚刚经历了 laravel 6 路线世代,但找不到任何东西。

谢谢!

【问题讨论】:

  • 它让我试图获取非对象的属性。 是什么?你能用相应的代码发布确切的消息吗?
  • @Loek 当然,对不起。错误提示“尝试获取非对象的属性 'is_draft'”

标签: php laravel


【解决方案1】:

Laravel 6+ 使 route() 函数的 Route 参数名称更加严格,参数名称必须与它在路由中给出的名称匹配。其余部分保持原样并尝试将路由链接生成更改为以下

$content['fan_prize_url'] = route('claim.prize', ['contest_prize' => $content['prize_id'], 'u' => $recipient->guid]);

【讨论】:

  • 不幸的是,它没有用。我尝试按照您所说的更改路由生成,并将 web.php 更改为 ` 。 Route::get('claim/{id}' ` 使用旧的路由生成,但仍然有 Not Found。这是链接的样子:(127.0.0.1:8000/…) id 有效,guid 有效。
【解决方案2】:

如果有人也会被卡住,显然在 Laravel 6 中,有一种传递值和对象的新方法。我不得不改变

$content['fan_prize_url'] = route('claim.prize', ['id' => $content['prize_id'], 'u' => $recipient->guid]);

$content['fan_prize_url'] = route('claim.prize', [$content['prize_id'], 'u' => $recipient->guid]);

传递对象本身而不是字符串并且它起作用了!

【讨论】:

    猜你喜欢
    • 2020-04-16
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 2019-03-18
    • 2016-06-08
    • 2020-03-28
    • 2020-03-26
    相关资源
    最近更新 更多