1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
<?php /** * @file * Contains DrupalexampleFormExampleConfigForm. */ namespace DrupalexampleForm; use DrupalCoreFormConfigFormBase; use DrupalCoreFormFormStateInterface; use DrupalCoreConfigConfigFactoryInterface; use SymfonyComponentDependencyInjectionContainerInterface; use DrupalCoreSessionAccountProxy; /** * Implements an example configuration form. */ class ExampleConfigForm extends ConfigFormBase { /** * DrupalCoreSessionAccountProxy definition. * * @var AccountProxy $currentUser */ protected $currentUser; /** * Class constructor. */ public function __construct(ConfigFactoryInterface $config_factory, AccountProxy $current_user) { parent::__construct($config_factory); $this->currentUser = $current_user; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { return new static( $container->get('config.factory'), $container->get('current_user') ); } /** * {@inheritdoc} */ protected function getEditableConfigNames() { return [ 'example.config_form', ]; } /** * {@inheritdoc}. */ public function getFormId() { return 'example_config_form'; } /** * {@inheritdoc}. */ public function buildForm(array $form, FormStateInterface $form_state) { // Get current user data. $uid = $this->currentUser->id(); drupal_set_message($uid); // ... $config = $this->config('example.config_form'); return parent::buildForm($form, $form_state); } /** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { $this->config('example.config_form')->save(); parent::submitForm($form, $form_state); } }
static create() 方法返回了ExampleConfigForm的对象,在创造对象的时候,将service传入contruct(),注意 contruct和create内的static()方法的变量必须是对应的。create()方法在DrupalCoreDependencyInjectionContainerInjectionInterface中声明,FormBase和ConfigFormBase都实现了这个interface。
routing调用BuildForm的时候如何调用的create方法没找到
Using Dependency in Blcok
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
<?php namespace DrupaldrupalisePluginBlock; use DrupalCoreBlockBlockBase; use DrupalCorePluginContainerFactoryPluginInterface; use SymfonyComponentDependencyInjectionContainerInterface; use DrupaldrupaliseServicesDrupaliseMe; /** * Provides a 'Drupalise' block. * * @Block( * id = "drupalise", * admin_label = @Translation("Drupalise"), * ) */ class Drupalise extends BlockBase implements ContainerFactoryPluginInterface{ /** * @var $drupalise DrupaldrupaliseServicesDrupaliseMe */ protected $drupalise; /** * @param SymfonyComponentDependencyInjectionContainerInterface $container * @param array $configuration * @param string $plugin_id * @param mixed $plugin_definition * * @return static */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { return new static( $configuration, $plugin_id, $plugin_definition, $container->get('drupalise') ); } /** * @param array $configuration * @param string $plugin_id * @param mixed $plugin_definition * @param DrupaldrupaliseServicesDrupaliseMe $drupalise_me */ public function __construct(array $configuration, $plugin_id, $plugin_definition, DrupaliseMe $drupalise_me) { parent::__construct($configuration, $plugin_id, $plugin_definition); $this->drupalise = $drupalise_me; } /** * {@inheritdoc} */ public function build() { $slogan= $this->drupalise->Drupalise(); // Function from your service file will return 'Drop Drop Drupal !!!' $build = []; $build['drupalise']['#markup'] = 'Drupalise is best' . $slogan; return $build; } }
Block如果要实现依赖注入service除了继承默认BlockBase还要实现ContainerFactoryPluginInterface
近期评论