【问题标题】:$request->route() returns null in laravel$request->route() 在 laravel 中返​​回 null
【发布时间】:2022-06-15 22:05:43
【问题描述】:

我有这个代码:

class TotersProviderLoginController extends Controller
{

    private $oauthService;

    public function __construct(Request $request)
    {
        $provider = $request->route()->parameter('provider'); // error here
        if($provider == 'google')
            $this->oauthService = new GoogleOauthService();
        else
            throw new \Exception('Provider '.($provider ?? '').' not supported!');
    }

我定义了以下路线:

Route::get('login/toters/{provider}', 'Accounts\TotersProviderLoginController@redirectToProvider');
Route::get('login/toters/{provider}/redirect', 'Accounts\TotersProviderLoginController@handleProviderCallback');
Route::get('login/toters/{provider}/csrf', 'Accounts\TotersProviderLoginController@getCsrf');
Route::post('login/toters/{provider}/oauth', 'Accounts\TotersProviderLoginController@requestToken');
    

当我跑步时出于某种原因

php artisan route:list --verbose

我收到此错误

In TotersProviderLoginController.php line 38:

  [Symfony\Component\Debug\Exception\FatalThrowableError]
  Call to a member function parameter() on null

所以很明显$request->route() 正在返回 null。这是为什么? 注意:我使用的是 Laravel 5.8

【问题讨论】:

  • 会不会是使用artisan命令的时候没有request变量?
  • 你能在控制器函数中尝试相同的逻辑而不是构造函数吗?

标签: php laravel laravel-5


【解决方案1】:

正如你在问题中提到的,我已经调试了自己,我找到了你得到错误的方式。

当您运行php artisan route:list --verbose 命令时,它将调试所有路由并调用每个路由的控制器方法。

在你的情况下,当你使用verbose 运行命令时会发生什么,路由没有provider 默认值,这就是它总是给出空值的原因。

当你通过邮递员或网络调用路由时,它肯定会起作用,因为那时你总是对provider 有一些价值。

谢谢:)

【讨论】:

    猜你喜欢
    • 2022-01-27
    • 2016-11-08
    • 2018-03-08
    • 1970-01-01
    • 2018-04-21
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多