web-dev-qa-db-ja.com

ReflectionExceptionエラー(クラスが存在しない)を修正するにはどうすればよいですか?

drupal 8.は初めてです。8.ユーザーのログインフォームを拡張して、ユーザー名フィールドを削除し、メールフィールドを追加したいと思います。そこで、カスタムモジュールを作成し、イベントサブスクライバーとそれをサービスとして宣言しました:

services:
    mdmuser.route_subscriber:
        class: Drupal\mdm_user\Routing\RouteSubscriber
        tags: 
             - {name: event_subscriber }

そして、これが私のクラスRouteSubscriberです

 <?php

 /**
 * @file
 * Contains \Drupal\mdm_user\Routing\RouteSubscriber.
 */

 namespace Drupal\mdm_user\Routing;

 use Drupal\Core\Routing\RouteSubscriberBase;
 use Symfony\Component\Routing\RouteCollection;

 /**
 * Listens to the dynamic route events.
 */
 class RouteSubscriber extends RouteSubscriberBase {

 protected function alterRoutes(RouteCollection $collection) {

     if ($route = $collection->get('user.login')) {
      $route->setDefault('_form', '\Drupal\mdm_user\Form\UserLoginForm');
      $collection->add('user.login', $route);
    }
  }
}

新しいモジュールをインストールするときに、このエラーが発生しました。

ReflectionException: Class Drupal\mdm_user\Routing\RouteSubscriber does not exist in ReflectionClass->__construct() (line 31 of core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterEventSubscribersPass.php).

どんなアイデアでも大歓迎です!

ありがとう

2
Debbz

それはファイル構造でなければなりません。 /modules/custom/mdm_user/src/Routing/RouteSubscriber.phpにあることをもう一度確認してください

また、クラスでは、ルートを再度追加する必要はなく、参照によって渡されます。

削除できます

$collection->add('user.login', $route);
1
oknate

同じ問題に出くわした。最終的に、RouteSubscriper.phpファイルの名前空間の愚かな間違いになりました。私が持っていた:

namespace Drupal\my_module\Routing\RouteSubscriber;

あるべき時:

namespace Drupal\my_module\Routing;
0
pwaterz

上記のエラーメッセージが表示される場合は、次の点を確認してください。

  1. ルーティングファイルにスペルミスがないかどうかを確認します。つまり、書き込んだ名前が何かで、ファイル名が他のものである可能性があります。
  2. コントローラファイルで定義されたクラス名がファイル名と一致することを確認します
  3. フォルダー構造は '\ Drupal\module_name\src\Controller\exampleConfig.php'のようなものですが、ルーティングファイルは次のようなものになります "\ Drupal\module_name\Controller\exampleConfig" "src"フォルダーについて心配する必要はありません
  4. 名前空間が存在するかどうか、適切に記述されているかどうかを確認してください
  5. モジュールの* .routing.ymlに不要な余分な行がないか確認してください。
  6. コントローラークラスを含むファイルの最後とコントローラーのクラス名の最後に「コントローラー」を追加します。

私は以下の問題のアプローチを持っています:

drupal 'drupal gcon'、 も参照 のweb/dir近くのbashでコマンドを試してください

お役に立てれば。

ハッピーコーディング...

0
Umesh Patil