如何在Drupal 8中更改“注册用户”,“更改密码”和“用户编辑”的页面

时间:2018-07-09 09:16:40

标签: forms routes user-controls drupal-8

我想更改“注册用户” “更改密码” “用户编辑” 。 在Drupal前端这是不可能的,并且您还必须在代码中多加注意。 在论坛上,您通常会发现很少的帮助,如果不是,那么 满意的。 因此,我喜欢分享自己的解决方案,以免使人头痛。

1 个答案:

答案 0 :(得分:0)

Drupal标准已经提供了三种形式,如果要更改它们,则必须访问路由并重定向。

  1. 为此,您首先创建一个类似于“ my_forms”的模块。

  2. 第二个要挂接到网站的表单或页面。例如 “ ForgotPasswordForm”

  3. 在my_forms“路由”中创建一个文件夹,并创建一个文件“ RouteSubscriber.php”

代码:

<?php
namespace Drupal\my_forms\Routing;
class RouteSubscriber extends RouteSubscriberBase{
    protected function alterRoutes( RouteCollection $collection ){
        //enter code here
    }
}   
  1. 现在,您可以通过添加以下内容-
  2. 来更改到不同页面的路由

代码:

//edit the 'forgot password' page
if ( $route = $collection->get( 'user.pass' ) ){
    $route->setDefault( '_form', '\Drupal\my_forms\Form\ForgotPasswordForm' );
}

关键字“ user.pass”允许您更改路由。 setDefault将路由重定向到您自己的表单。

//edit the 'register' page
if ( $route = $collection->get( 'user.register' ) )
    {
        $route->setDefaults( array(
                                 '_title'      => 'Register',
                                 '_controller' => '\Drupal\myy_forms\Controller\LocalTaskController::offerRegistrationPage'
                             )
        );
    }

注册的关键字是“ user.register”。通过使用setDefault s 设置路线,您还可以更改链接/按钮的名称。在这种情况下,我使用控制器在注册内打印出正常页面。 (更多信息在文章末尾)

if ( $route = $collection->get( 'entity.user.edit_form' ) ){
    //enter code here
}

对于“用户编辑”页面,您需要使用关键字“ entity.user.edit_form”。

  1. 最后一步是清除您的现金,在Drupal网站上注册更改并刷新页面。

使用Drupal控制器加载简单页面:

namespace Drupal\my_forms\Controller;

class LocalTaskController extends ControllerBase{
/** @var  NodeStorage $nodeStorage */
protected $nodeStorage;
/** @var  EntityViewBuilder $viewBuilder */
protected $viewBuilder;

function __construct( $nodeStorage, $viewBuilder )
{
    $this->nodeStorage = $nodeStorage;
    $this->viewBuilder = $viewBuilder;
}

public static function create( ContainerInterface $container )
{
    $nodeStorage = $container->get( 'entity.manager' )->getStorage( 'node' );
    $viewBuilder = $container->get( 'entity_type.manager' )->getViewBuilder( 'node' );

    return new static( $nodeStorage, $viewBuilder );

}

public function offerRegistrationPage()
{
    $node        = $this->nodeStorage->load( 24 );
    $renderArray = $this->viewBuilder->view( $node );

    return [
        '#type'   => '#markup',
        '#markup' => render( $renderArray ),
    ];
}

“ 24”是简单页面的编号,应显示而不是标准注册。