Puncte:-2

InvalidArgumentException: Clasa... nu există în formularul de configurare personalizată

drapel id

Creez un formular de configurare, astfel încât să pot seta dinamic cheia API pentru modulul meu personalizat de vreme.

Dar când scriu în adresa URL http://drupalsite/admin/config/services/weather/settings primesc eroarea:

InvalidArgumentException: Clasa „\Drupal\weather\Form\WeatherSettingsForm” nu există. în Drupal\Core\DependencyInjection\ClassResolver->getInstanceFromDefinition() (linia 24 din core/lib/Drupal/Core/DependencyInjection/ClassResolver.php).

Am verificat numele clasei și numele fișierului și am șters memoria cache, dar eroarea nu a dispărut. Cum să o repar?

weather.routing.yml

weather.weather_page:                               
  cale: „/meteo/{oraș}”
  implicite:                                                       
    _controller: „\Drupal\weather\Controller\WeatherPage::getWeather”                          
  cerinte:                                        
     _permission: „accesează conținut”
setări.meteo:
  cale: „/admin/config/services/weather/settings”
  implicite:
    _form: „\Drupal\weather\Form\WeatherSettingsForm”
    _title: „Formular Setări meteo”
  cerinte:
    _permission: „administrați configurația site-ului”

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);
  }
}
?>
drapel cn
Presupunând că numele mașinii modulului dvs. este `weather`, mutați clasa formularului la `module_path/src/Form/`
bimsalrobit avatar
drapel id
@Clive Scuză-mă, poate nu te-am înțeles, dar spui că trebuie să mut fișierul `WeatherSettingsForm.php` care conține clasa `WeatherSettingsForm` într-un folder `modules/custom/weather/src/Form`? Dar acest fișier este acolo: https://i.postimg.cc/KYqv3NYp/sc.png
Lambic avatar
drapel ph
Am rulat codul așa cum a fost postat și funcționează pentru mine, așa că poate aveți o greșeală de scriere undeva la nivel local, sau poate un caracter ascuns a intrat undeva.
bimsalrobit avatar
drapel id
@Lambic Pe ce versiune de drupal ai rulat codul?
Lambic avatar
drapel ph
Suntem pe versiunea 9.1
bimsalrobit avatar
drapel id
@Lambic Am găsit o soluție la problemă, a trebuit doar să repornesc docker4drupal.
Matoeil avatar
drapel za
adauga $settings['class_loader_auto_detect'] = FALSE; la local.settings.php
Puncte:1
drapel id

Soluţie:

Trebuia doar să repornesc docker4drupal.

Când am scris comenzile:

oprire docker-compose
docker-compune până -d

Eroarea a dispărut.

Kevin avatar
drapel in
Nu ați șters memoria cache după ce ați făcut modificări? Repornirea serverelor web este (extrem de rar) pentru dezvoltare.
bimsalrobit avatar
drapel id
@Kevin da, desigur, am șters memoria cache după ce am făcut modificări.
Kevin avatar
drapel in
Altceva este greșit sau s-a întâmplat atunci, deoarece o repornire a serverului pentru a vedea modificări nu este normală, decât dacă ați activat modulul (înregistrând căile de clasă) și apoi ați mutat unele fișiere. Acest lucru poate necesita uneori o repornire pentru a șterge cache-ul căii de clasă.
drapel ve
Am pierdut o jumătate de oră cu asta :( Mulțumesc mult

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.