Điểm:-2

UnlimitedArgumentException: Lớp ... không tồn tại ở dạng cấu hình tùy chỉnh

lá cờ id

Tôi tạo biểu mẫu cấu hình để tôi có thể tự động đặt khóa API cho mô-đun thời tiết tùy chỉnh của mình.

Nhưng khi tôi viết địa chỉ url http://drupalsite/admin/config/services/weather/settings tôi nhận được lỗi:

UnlimitedArgumentException: Lớp "\Drupal\weather\Form\WeatherSettingsForm" không tồn tại. trong Drupal\Core\DependencyInjection\ClassResolver->getInstanceFromDefinition() (dòng 24 của core/lib/Drupal/Core/DependencyInjection/ClassResolver.php).

Tôi đã kiểm tra Tên lớp và Tên tệp và xóa bộ nhớ cache nhưng lỗi không biến mất. Làm thế nào để sửa chữa nó?

thời tiết.routing.yml

thời tiết.weather_page:                               
  đường dẫn: '/thời tiết/{thành phố}'
  mặc định:                                                       
    _controller: '\Drupal\weather\Controller\WeatherPage::getWeather'                          
  yêu cầu:                                        
     _permission: 'truy cập nội dung'
thời tiết.settings:
  đường dẫn: '/admin/config/services/thời tiết/cài đặt'
  mặc định:
    _form: '\Drupal\weather\Form\WeatherSettingsForm'
    _title: 'Biểu mẫu cài đặt thời tiết'
  yêu cầu:
    _permission: 'quản lý cấu hình trang web'

WeatherSettingsForm.php

<?php

namespace Drupal\weather\Form;         

use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;

/**
 * Configure example settings for this site.
 */
class WeatherSettingsForm extends ConfigFormBase {      
  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'weather_admin_settings';
  }

  /**
   * {@inheritdoc}
   */
  protected function getEditableConfigNames() {
    return [
      'weather.settings',
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $config = $this->config('weather.settings');

    $form['weather_api_key'] = array(
      '#type' => 'textfield',
      '#title' => $this->t('API Key'),
      '#default_value' => $config->get('weather_api_key'),
    );

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

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $this->configFactory->getEditable('weather.settings')
      ->set('weather_api_key', $form_state->getValue('weather_api_key'))
      ->save();

    parent::submitForm($form, $form_state);
  }
}
?>
lá cờ cn
Giả sử tên máy của mô-đun của bạn là `weather`, hãy di chuyển lớp biểu mẫu sang `module_path/src/Form/`
bimsalrobit avatar
lá cờ id
@Clive Xin lỗi, có thể tôi không hiểu bạn, nhưng bạn nói rằng tôi cần di chuyển tệp `WeatherSettingsForm.php` chứa lớp `WeatherSettingsForm` vào một thư mục `modules/custom/weather/src/Form`? Nhưng tập tin này ở đó: https://i.postimg.cc/KYqv3NYp/sc.png
Lambic avatar
lá cờ ph
Tôi đã chạy mã như đã đăng và nó hoạt động với tôi, vì vậy có thể bạn mắc lỗi đánh máy ở đâu đó cục bộ hoặc có thể có một ký tự ẩn ở đâu đó.
bimsalrobit avatar
lá cờ id
@Lambic Bạn đã chạy mã trên phiên bản drupal nào?
Lambic avatar
lá cờ ph
Chúng tôi đang ở phiên bản 9.1
bimsalrobit avatar
lá cờ id
@Lambic Tôi đã tìm ra giải pháp cho vấn đề này, tôi chỉ cần khởi động lại docker4drupal.
Matoeil avatar
lá cờ za
thêm $settings['class_loader_auto_detect'] = FALSE; đến local.settings.php
Điểm:1
lá cờ id

Dung dịch:

Tôi chỉ cần khởi động lại docker4drupal.

Khi tôi viết các lệnh:

docker-compose dừng lại
docker-compose up -d

Lỗi đã biến mất.

Kevin avatar
lá cờ in
Bạn không xóa bộ nhớ cache sau khi thực hiện thay đổi? Khởi động lại máy chủ web là (cực kỳ hiếm) để phát triển.
bimsalrobit avatar
lá cờ id
@Kevin vâng, tất nhiên, tôi đã xóa bộ nhớ cache sau khi thực hiện các thay đổi.
Kevin avatar
lá cờ in
Sau đó, có điều gì đó không ổn hoặc đã xảy ra, vì máy chủ khởi động lại để xem các thay đổi là không bình thường, trừ khi bạn bật mô-đun (đăng ký đường dẫn lớp) và sau đó di chuyển một số tệp. Điều đó đôi khi có thể yêu cầu khởi động lại để xóa bộ đệm đường dẫn lớp.
lá cờ ve
Mất nửa tiếng với cái này :( Cảm ơn bạn rất nhiều

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.