Drupal 8 nhận cấu hình theo chương trình

Chúng ta sẽ xem cách chúng ta có thể xác định giá trị mặc định khi cài đặt mô-đun và sau đó chỉnh sửa giá trị tương tự thông qua biểu mẫu cấu hình và cuối cùng, chúng ta sẽ sử dụng các cài đặt này trong bộ điều khiển để hiển thị các mục trên một trang bao gồm hình ảnh về mèo, từ _ . (Tôi chọn api này vì nó yêu cầu khóa và chúng tôi cần khóa đó để giới thiệu khả năng của drupal config api )

_ Mã cho blog này trên github tại đây;

Trước khi bắt tay vào viết mã, trước tiên tôi sẽ phác thảo các cấu trúc thư mục và tệp cần thiết, sau đó tìm hiểu nội dung của từng tệp.
Hãy đặt tên cho mô-đun là rw_config, đây cũng sẽ là tên của thư mục mô-đun.

Tại thư mục gốc của thư mục này, chúng ta sẽ có

  • config (thư mục chứa cài đặt mặc định trên tệp cài đặt và lược đồ)
  • src (thư mục sẽ chứa các lớp mô-đun của chúng tôi)
  • mẫu (thư mục chứa các tệp mẫu của mô-đun này)
  • rw_config. thông tin. yml
  • rw_config. mô-đun
  • rw_config. định tuyến. yml

Thư mục con cấu hình sẽ chứa hai thư mục con; . cài đặt. yml' và 'rw_config. lược đồ. yml', tương ứng. Đối với thư mục src, chúng ta sẽ đi vào những tập tin và thư mục trong đó sau khi cần. Bây giờ chúng ta sẽ đi thẳng vào nội dung của
từng tệp.

Dưới đây là minh họa về cách cấu trúc mô-đun rw_config

Drupal 8 nhận cấu hình theo chương trình

Dưới đây là mã đi vào rw_config. thông tin. yml. và xác định mô-đun của chúng tôi
# see https://www.drupal.org/docs/drupal-apis/configuration-api/configuration-api-overview

name: 'Read Write Config'
type: module
description: 'Example on how to write and read to drupal config'
core: 8.x
package: 'Dev Examples'

Trong 'rw_config. module', chúng tôi sẽ chỉ xác định/đăng ký mẫu mà chúng tôi sẽ sử dụng cho dự án này, vì vậy các lớp khác (Trình điều khiển trong trường hợp của chúng tôi) có thể sử dụng tương tự

Dưới đây là mã đi vào rw_config. mô-đun
 [
      'render element' => 'children',
      'template' => 'rw-config-listing', #name of the template file +.html.twig
      'variables' => [
        'data' => FALSE
      ]
    ]
  ];
}

'rw_config. định tuyến. yml' sẽ chứa hai tuyến, một để hiển thị biểu mẫu cấu hình (chỉnh sửa/cập nhật cấu hình) và một tuyến khác để hiển thị trang sẽ xuất dữ liệu trong khi dựa vào cài đặt cấu hình tùy chỉnh của chúng tôi. Tệp này dựa trên mọi thứ chúng tôi sẽ thêm vào thư mục src, nhưng trên thư mục src sau

Dưới đây là mã đi vào rw_config. định tuyến. yml

#see src\Controller\ConController class
rw_config.r_test:
 path: '/rwconfig/tests/page'
 defaults:
   _controller: '\Drupal\rw_config\Controller\ConController::showCats'
   _title: 'Rw Config Test Page'
 requirements:
   _permission: 'access content'

#see src\Form\RwConfigSettingsForm class
rw_config.config_form:
 path: '/rw_config/config_settings'
 defaults:
   _form: '\Drupal\rw_config\Form\RwConfigSettingsForm'
   _title: 'Rw Config Test Page'
 requirements:
   _permission: 'access content' # should be a defined better permission

Hãy nhớ hai tệp của chúng tôi trong thư mục con cấu hình 'config\install\pg_config. cài đặt. yml' và 'config\schema\rw_config. lược đồ. yml'. Như tên của chúng gợi ý, rw_config. lược đồ. yml xác định lược đồ đối tượng cấu hình của chúng tôi, trong khi rw_config. cài đặt. yml xác định các giá trị mặc định khi cài đặt mô-đun và có thể được cập nhật hoặc xóa. (NB. kể từ Drupal 8, chúng tôi không cần xác định cấu trúc lược đồ cho api cấu hình, bạn có thể bỏ qua rw_config. lược đồ. yml và mô-đun của bạn sẽ hoạt động tốt. )

Dưới đây là mã đi vào từng tệp
# ---- Start of rw_config.settings.yml file --------------

# Contains the default values on install and can be
# overridden in our config settings form, accessible
# on route `/rw_config/config_settings`

api_key: 'Test default api_key on install'
app_title: 'Test default app title on install'
show_pictures: false
 
 
# ---- End of rw_config.settings.yml file --------------

# ---- Start of rw_config.schema.yml file --------------
# Defines rw_config.settings schema
rw_config.settings:
  type: config_object
  label: 'Read Write Config Example'
  mapping:
    api_key:
      type: string
      label: 'API key'
    app_title:
      type: string
      label: 'The app title'
    show_pictures:
      type: boolean
      label: 'Control if picture display on test page'
 
# ---- End of rw_config.schema.yml file --------------

Hãy nhớ tệp định tuyến và thư mục src của chúng tôi, hãy tạo những gì chúng tôi cần và nối các phần còn lại. Chúng tôi cần thêm hai tệp nữa trong thư mục con src là; . php' và 'src\Controller\ConController. php' xác định biểu mẫu/trang cấu hình của chúng tôi và trang hiển thị ứng dụng của chúng tôi tương ứng

Dưới đây là mã đi vào từng tệp;
config('rw_config.settings');

   $form['api_key'] = [
     '#default_value' => $config->get('api_key'),
     '#description' => $this->t('Your api key give at https://thecatapi.com/'),
     '#maxlength' => 40,
     '#required' => TRUE,
     '#title' => $this->t('API key'),
     '#type' => 'textfield',
   ];

   $form['app_title'] = [
     '#default_value' => $config->get('app_title'),
     '#description' => $this->t('Example page title'),
     '#maxlength' => 40,
     '#required' => TRUE,
     '#title' => $this->t('App title'),
     '#type' => 'textfield',
   ];

   $form['show_pictures'] = [
     '#default_value' => $config->get('show_pictures'),
     '#description' => $this->t('Show pictures '),
     '#title' => $this->t('Control if picture display on test page : ..../rwconfig/tests/page'),
     '#type' => 'checkbox',
   ];


   return parent::buildForm($form, $form_state);
 }


 public function submitForm(array &$form, FormStateInterface $form_state) {

   # save to config and clear cache
   $config = $this->config('rw_config.settings');
   $config
     ->set('api_key', $form_state->getValue('api_key'))
     ->set('app_title', $form_state->getValue('app_title'))
     ->set('show_pictures', $form_state->getValue('show_pictures'))
     ->save();

   // clear cache
   drupal_flush_all_caches();

   parent::submitForm($form, $form_state);
 }

}


// RwConfigSettingsForm.php End ------------------------------------------------

configFactory = $configFactory;
   $this->client = $client;
 }

 public static function create(ContainerInterface $container) {
   return new static(
     # see https://www.drupal.org/docs/drupal-apis/configuration-api/simple-configuration-api#s-interacting-with-configuration
     $container->get('config.factory'),
     # see  https://www.drupal.org/docs/contributed-modules/http-client-manager
     $container->get('http_client')
   );
 }

 public function showCats(){
   $config = $this->configFactory->getEditable('rw_config.settings');
   $api_url = 'https://api.thecatapi.com/v1/images/search?limit=20&page=1&order=Desc';

   $options = [
     'headers' => [
       'Content-Type' => 'application/json',
       'x-api-key' => $config->get('api_key')
     ]
   ];

   $data = $this->client->request('GET', $api_url, $options);

   $items = Json::decode($data->getBody()->getContents());

   return [
     '#theme' => 'rw_config_listing', # remember template definition in rw_config.module
     '#data' => [ # data to the template file
       'app_title' => $config->get('app_title'),
       'items' => $items,
       'show_pictures' => $config->get('show_pictures'),

     ]
   ];
 }

}

// ConController.php End ------------------------------------------------

Cuối cùng, trước khi chúng tôi kiểm tra mô-đun, hãy tạo tệp cuối cùng có tên 'rw-config-listing. html. twig' trong thư mục mẫu của chúng tôi (xem rw_config_theme() trong rw_config. tệp mô-đun )

Dưới đây là mã đi vào tệp này;

App Name: {{ data['app_title'] }}


{% for key, item in data['items'] %}

Picture id: {{ item['id'] }}

{% if data['show_pictures'] %} Show Picture:
Drupal 8 nhận cấu hình theo chương trình

Bây giờ hãy truy cập https. //thecatapi. com/ và đăng ký để nhận khóa api được gửi đến email của bạn và sử dụng mã tương tự trên biểu mẫu cấu hình ở trên, đảm bảo chọn 'Hiển thị ảnh' và có thể đặt cho ứng dụng của bạn một tiêu đề (bạn có thể quay lại trang này và thay đổi

Drupal 8 nhận cấu hình theo chương trình

PHẦN KẾT LUẬN

Định nghĩa cấu hình có thể được xuất dưới dạng tệp giữa các trang web , nếu thực hiện việc này và làm việc với các khóa nhạy cảm, bạn có thể cân nhắc xử lý các tệp cấu hình của mình cẩn thận (bảo mật)

NGUỒN

  • Tổng quan về API cấu hình https. //www. drupal. org/docs/drupal-apis/configuration-api/configuration-api-overview

  • Tài liệu Yaml https. // yaml. tổ chức/spec/1. 2/thông số kỹ thuật. html#id2760395

  • mẫu nhánh tùy chỉnh cho mô-đun tùy chỉnh https. //www. drupal. org/docs/theming-drupal/twig-in-drupal/create-custom-twig-templates-for-custom-module

  • Quản lý cấu hình trang drupal https. //www. drupal. org/docs/quản lý cấu hình/quản lý cấu hình trang web của bạn

Api quản lý cấu hình Drupal

Bài báo cáo

Thưởng thức bài viết này?

2

Drupal 8 nhận cấu hình theo chương trình
2

Chia sẻ

Nicholas Babu

Nhà phát triển đam mê và một người yêu thiên nhiên

Với niềm đam mê công nghệ (công nghệ tốt), tôi có bốn năm kinh nghiệm phát triển ứng dụng, cho cả web và máy tính để bàn. Các công cụ quen thuộc nhất bao gồm;

Theo

Khám phá và đọc thêm các bài viết từ Nicholas Babu

bắt đầu

Thưởng thức bài viết này?

Để lại một lượt thích và bình luận cho Nicholas

2

Drupal 8 nhận cấu hình theo chương trình
2

Drupal 8 nhận cấu hình theo chương trình
Hãy là người đầu tiên chia sẻ ý kiến ​​của bạn

Drupal 8 nhận cấu hình theo chương trình
Hỗ trợ đánh dấu hương vị GitHub

Gửi đi

Catrin Brooks

3 tháng trước

Khi tôi không làm việc với tư cách là một lập trình viên, tôi thích dành thời gian viết các bài luận. Cuối cùng, tôi thực sự hy vọng rằng bạn sẽ thấy nó hấp dẫn. Có một số hướng dẫn để viết tiểu luận dịch thuật. Trước tiên, hãy đảm bảo rằng bạn đã đọc tài liệu bằng ngôn ngữ gốc. Điều này rất quan trọng vì bạn phải tránh mắc lỗi khi dịch tài liệu