Cách tốt nhất để xử lý các biến trên mỗi môi trường


7

Tôi có một mô-đun tùy chỉnh. Đó là FormBase để tạo một biểu mẫu. Và khi gửi, tôi đăng các giá trị lên API. Tất cả điều này hoạt động. Nhưng tôi muốn thay đổi biến URL cơ sở (được sử dụng trong nhiều phương thức) để khi bạn ở bất kỳ môi trường nào ngoài hoạt động, bạn sẽ nhận được một URL khác.

Tôi muốn tìm ra cách 8 Drupal để làm điều này.

class EventSuggestionForm extends FormBase {
  // Needs to be different if not the live site...
  private $baseUrl = 'https://www.example.com';
  private $apiUrl = '/api/v1/';
...

Tôi có thể nhận được một số lời khuyên?

Câu trả lời:


11

Bạn có thể tạo một cài đặt mới trong settings.local.phphoặc settings.phptệp của bạn như:

$settings['event_base_url'] = 'https://www.example.com';

hoặc một số người đang thêm khối chuyển đổi dựa trên máy chủ lưu trữ, ví dụ:

switch (@$_SERVER['HTTP_HOST']) {
  default:
  case 'dev.example.com':
     $settings['event_base_url'] = 'http://dev.example.com';
     break;
  case 'stage.example.com':
     $settings['event_base_url'] = 'https://test.example.com';
     break;
  case 'www.example.com':
  case 'preprod.example.com':
     $settings['event_base_url'] = 'https://live.example.com';
     break;
}

Sau đó tham chiếu nó trong mã như:

use Drupal\Core\Site\Settings;
$baseUrl = Settings::get('event_base_url', '');

Vì vậy, mã của bạn sẽ trông như sau:

use Drupal\Core\Site\Settings;
class EventSuggestionForm extends FormBase {
  private $baseUrl;
  private $apiUrl = '/api/v1/';

  function __construct() {
    // Read value from the settings file.
    $this->$baseUrl = Settings::get('event_base_url', '');
  }
...

Sau đó thay đổi cài đặt này cho mỗi môi trường trong tệp cài đặt, tương tự như bạn đã có thông tin cơ sở dữ liệu khác nhau cho mỗi môi trường khác nhau. Đây là khái niệm tương tự như nó được sử dụng cho $settings['file_public_base_url']tham số hiện có .


1
Đồng thời xem API trạng thái được xây dựng cho các trường hợp sử dụng tương tự
Clive

2
Ồ và bạn sẽ phải khởi tạo $baseUrltrong hàm tạo , các giá trị mặc định cho các thuộc tính phải không đổi
Clive

1
Tôi thực sự đã xem xét API Nhà nước một chút trước khi đăng. Tôi đã đọc phần có nội dung: "Vì vậy, hãy sử dụng API trạng thái để lưu trữ thông tin thoáng qua, có thể mất sau khi thiết lập lại." Tôi đã có một cuộc tranh luận nếu điều này sẽ đủ điều kiện hay không dựa trên điều đó. Thành thật mà nói, tôi vẫn không chắc chắn.
xpersonas

1
Lưu ý chắc chắn nơi bạn đọc về trạng thái và mất dữ liệu, dữ liệu được lưu trữ trong trạng thái không bị mất, rất nhiều thông tin khá quan trọng để Drupal hoạt động được lưu trữ trong đó. Nhưng cài đặt và cấu hình thay thế ghi đè thông qua settings.php chắc chắn phù hợp hơn nhiều cho việc này. API trạng thái chủ yếu dành cho những thứ mà mã quản lý nội bộ, ví dụ Drupal sử dụng nó để lưu trữ lần cuối cùng cron được thực thi. Hoặc chế độ bảo trì có được bật hay không (có ý nghĩa vì nó là thứ được kích hoạt tạm thời và sau đó bị vô hiệu hóa lại, không phải là thứ bạn kiểm soát trên mỗi môi trường
Berdir

Nhận xét trước đây là dành cho @xpersonas.
kiamlaluno
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.