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).
どんなアイデアでも大歓迎です!
ありがとう
それはファイル構造でなければなりません。 /modules/custom/mdm_user/src/Routing/RouteSubscriber.phpにあることをもう一度確認してください
また、クラスでは、ルートを再度追加する必要はなく、参照によって渡されます。
削除できます
$collection->add('user.login', $route);
同じ問題に出くわした。最終的に、RouteSubscriper.phpファイルの名前空間の愚かな間違いになりました。私が持っていた:
namespace Drupal\my_module\Routing\RouteSubscriber;
あるべき時:
namespace Drupal\my_module\Routing;
上記のエラーメッセージが表示される場合は、次の点を確認してください。
私は以下の問題のアプローチを持っています:
drupal 'drupal gcon'、 も参照 のweb/dir近くのbashでコマンドを試してください
お役に立てれば。
ハッピーコーディング...