Drupal մոդուլում բլոկի սահմանում
Բաժին V Դրամական ուղեցույց Drupal 8-ի հիմնական մոդուլների ստեղծման համար
.info-ից մինչև թեստեր, միայն հիմնականները
Հիշո՞ւմ եք, որ սկզբում այս դասի մեջ ասել էի, որ մենք կսահմանենք բլոկ՝ ֆորմայով։ Հիմա ժամանակն է այդ հարցին անդրադառնալու։
/src/Form/LoremIpsumBlockForm.php
<?php namespace Drupal\loremipsum\Form; use Drupal\Core\Form\FormBase; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Url; /** * Lorem Ipsum բլոկի ֆորմա */ class LoremIpsumBlockForm extends FormBase { /** * {@inheritdoc} */ public function getFormId() { return 'loremipsum_block_form'; }
Այս ֆայլը շատ նման է կարգավորումների ֆայլին, բացառությամբ այն բանի, որ այն ընդլայնում է FormBase դասը։
Նա նաև ունի buildForm() մեթոդ, որը գրեթե այսպիսի տեսք ունի.
/** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { // Քանի՞ պարբերություն։ // $options = new array(); $options = array_combine(range(1, 10), range(1, 10)); $form['paragraphs'] = [ '#type' => 'select', '#title' => $this->t('Պարբերություններ'), '#options' => $options, '#default_value' => 4, '#description' => $this->t('Քանի՞'), ]; // Քանի՞ արտահայտություն։ $form['phrases'] = [ '#type' => 'textfield', '#title' => $this->t('Արտահայտություններ'), '#default_value' => '20', '#description' => $this->t('Ամենաշատը յուրաքանչյուր պարբերության համար'), ]; // Գործարկել։ $form['submit'] = [ '#type' => 'submit', '#value' => $this->t('Ստեղծել'), ]; return $form; }
Այս մեթոդը օգտագործվում է բլոկում ֆորման տեղադրելու համար, որի միջոցով օգտվողները կարգավորում են, թե քանի տեքստային նմուշ են ցանկանում ստեղծել։
Մի մոռացեք նաև validateForm() և submitForm() մեթոդները.
/** * {@inheritdoc} */ public function validateForm(array &$form, FormStateInterface $form_state) { $phrases = $form_state->getValue('phrases'); if (!is_numeric($phrases)) { $form_state->setErrorByName('phrases', $this->t('Խնդրում ենք օգտագործել թիվ։')); } if (floor($phrases) != $phrases) { $form_state->setErrorByName('phrases', $this->t('Խնդրում ենք ոչ տասնորդական թվեր։')); } if ($phrases < 1) { $form_state->setErrorByName('phrases', $this->t('Խնդրում ենք օգտագործել զրոյից մեծ թիվ։')); } } /** * {@inheritdoc} */ public function submitForm(array &$form, FormStateInterface $form_state) { $form_state->setRedirect('loremipsum.generate', [ 'paragraphs' => $form_state->getValue('paragraphs'), 'phrases' => $form_state->getValue('phrases'), ]); } }
Այժմ անցնենք բլոկին.
<?php namespace Drupal\loremipsum\Plugin\Block; use Drupal\Core\Access\AccessResult; use Drupal\Core\Block\BlockBase; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Session\AccountInterface; /** * Ներկայացնում է Lorem ipsum բլոկ, որով կարող եք ցանկացած վայրում գեներացնել տեքստ։ * * @Block( * id = "loremipsum_block", * admin_label = @Translation("Lorem ipsum բլոկ"), * ) */ class LoremIpsumBlock extends BlockBase { /** * {@inheritdoc} */ public function build() { // Վերադարձնում է ֆորման՝ @ Form/LoremIpsumBlockForm.php-ից։ return \Drupal::formBuilder()->getForm('Drupal\loremipsum\Form\LoremIpsumBlockForm'); }
LoremIpsumBlock դասը ընդլայնում է BlockBase-ը և ունի չորս հիմնական մեթոդ, որոնք պետք է իրականացվեն՝ build(), blockAccess(), blockForm() և blockSubmit(): Առաջին մեթոդը պարզապես ցուցադրում է ֆորման, որը սահմանվել է մեր նախորդ քայլում։
Հաջորդը կարգավորվում է մուտքի վերահսկողությունը՝
/** * {@inheritdoc} */ protected function blockAccess(AccountInterface $account) { return AccessResult::allowedIfHasPermission($account, 'generate lorem ipsum'); }
Սահմանեք բլոկի ֆորման ադմինիստրատիվ էկրանին.
/** * {@inheritdoc} */ public function blockForm($form, FormStateInterface $form_state) { $form = parent::blockForm($form, $form_state); $config = $this->getConfiguration(); return $form; }
Ներկայացման ֆունկցիան.
/** * {@inheritdoc} */ public function blockSubmit($form, FormStateInterface $form_state) { $this->setConfigurationValue('loremipsum_block_settings', $form_state->getValue('loremipsum_block_settings')); } }
Այժմ մեր բլոկը պետք է աշխատի։
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.