我有以下代码:

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');
    

因为某种原因当我 run 的时候

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.为什么会这样?

推荐答案

正如你在问题中提到的那样,我已经调试了自己,并且我找到了获得错误的方法.

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

在您的情况下,当您使用verbose运行命令时会发生什么情况,路由并没有provider个默认值,这就是为什么它总是给出null值.

当你通过postman 或网络呼叫路由时,它肯定会起作用,因为在那个时候,你总是有一些provider英镑的价值.

谢谢:)

Php相关问答推荐

如何在WooCommerce HPOS订单列表中创建自定义过滤器?

仅在WooCommerce管理订单视图上显示订单项自定义元数据

在WooCommerce中禁用特定日期之前的免费送货

Laravel关系-为用户获取属于组织的所有团队

中继器内置中继器的ACF WordPress组

添加登录:需要app.yaml仍然允许所有拥有Google帐户的人访问

列出所有WooCommerce处理订单中的产品数量,SKU和品牌

在个人资料页面上显示个人资料图像

订单完成后创建 WooCommerce 促销代码

PHP API - 本地主机中的 SSL 证书问题

将产品数量、名称和结帐链接添加到 WooCommerce 添加到购物车消息

在特征中使用类的属性

根据所选付款方式更改 WooCommerce 提交结帐按钮文本

htaccess Rewriterule 无法以任何方式工作

PHP使用三元运算符进行null合并(再次)

正则表达式抓取递归括号的内容

password_verify 在 PHP 7.4 中有效,但在 PHP 8.2 中无效

使用 GROUP_CONCAT 规范化/转置来自查询的数据

使用 PHP ImageMagick 库将 pdf 文件的前 n 页转换为单个 png 图像文件

如何将在同一台服务器上运行的 2 个 PHP 应用程序与使用公共会话分开