9.8.1. hook_form_alter() ավելացնել «ներկայացնել» և վավերացնել առկա ձևի համար։
Այս դասում մենք կծանոթանանք Drupal Form API-ին և կստեղծենք կարգավորման ձև՝ մոդուլի համար։ Մենք արդեն ստեղծել ենք էջ և բլոկ ցուցադրող մոդուլներ, այժմ եկեք ստեղծենք կարգավորումների ձև, որում կպահպանենք տվյալներ՝ որոշ ծառայության միացման համար։ Ենթադրենք՝ մեզ անհրաժեշտ է կայքում պահպանել API Key և API Client ID, օրինակ՝ Google Maps API-ի համար։
Ծածկագրի օրինակները հասանելի են github-ում.
https://github.com/levmyshkin/drupalbook8
Մենք կարող ենք այս տվյալները պահել settings.php-ում և ավելացնել git-ին։ Սակայն դա անվտանգ չէ. մուտքագրումների տվյալները ավելի լավ է պահել տվյալների բազայում։
Եկեք մեր ձևի համար ավելացնենք նոր երթուղի՝
modules/custom/drupalbook/drupalbook.routing.yml
drupalbook.settings:
path: '/admin/structure/drupalbook/settings'
defaults:
_form: '\Drupal\drupalbook\Form\DrupalbookSettingsForm'
_title: 'DrupalBook Կարգավորումների ձև'
requirements:
_permission: 'administer site configuration'
Ի տարբերություն նախորդ երթուղիների՝ այստեղ defaults-ում նշվում է ոչ թե _controller, այլ _form։ Քանի որ մենք չենք ստեղծում Controller դաս՝ ձևի համար, այլ՝ form դաս։ Եկեք ստեղծենք այս ձևի դասի ֆայլը՝
modules/custom/drupalbook/src/Form/DrupalbookSettingsForm.php
Դուք պետք է ստեղծեք առանձին Form պանակ՝ src պանակի ներսում՝ ձևերի համար։ Սա թույլ է տալիս բաժանել մոդուլի ծածկագիրը ըստ անվանումների։
Ավելացրեք հետևյալ կոդը՝ ֆորմայի համար և մենք կվերլուծենք դրա բոլոր հատվածները՝
<?php
namespace Drupal\drupalbook\Form;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;
class DrupalbookSettingsForm extends ConfigFormBase {
public function getFormId() {
return 'drupalbook_admin_settings';
}
protected function getEditableConfigNames() {
return [
'drupalbook.settings',
];
}
public function buildForm(array $form, FormStateInterface $form_state) {
$config = $this->config('drupalbook.settings');
$form['drupalbook_api_key'] = array(
'#type' => 'textfield',
'#title' => $this->t('API Key'),
'#default_value' => $config->get('drupalbook_api_key'),
);
$form['drupalbook_api_client_id'] = array(
'#type' => 'textfield',
'#title' => $this->t('API Client ID'),
'#default_value' => $config->get('drupalbook_api_client_id'),
);
return parent::buildForm($form, $form_state);
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$this->configFactory->getEditable('drupalbook.settings')
->set('drupalbook_api_key', $form_state->getValue('drupalbook_api_key'))
->set('drupalbook_api_client_id', $form_state->getValue('drupalbook_api_client_id'))
->save();
parent::submitForm($form, $form_state);
}
}
...
Սա ամբողջ ձևի դասի կառուցվածքն է։ Այն թույլ է տալիս ստեղծել հեշտ հասանելի և պահպանվող կոնֆիգուրացիաներ։
Սա այս դասի ավարտն է։ Հաջորդ դասում կսովորենք՝ ինչպես ստեղծել բազմաքայլ ձևեր։
Ծածկագրի օրինակները հասանելի են github-ում.
https://github.com/levmyshkin/drupalbook8