从Laravel 5.7更新到6后找不到路由

时间:2019-12-19 17:44:52

标签: php laravel

我正在尝试将应用程序更新为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代路线,但找不到任何东西。

谢谢!

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

如果有人也会卡住,显然在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]);

传递对象本身而不是字符串,它可以正常工作!