Ergebnis 1 bis 6 von 6

Thema: auto_item mit AbstractFrontendModuleController

  1. #1
    Contao-Nutzer
    Registriert seit
    04.07.2011.
    Beiträge
    11

    Standard auto_item mit AbstractFrontendModuleController

    Hi liebe Community!

    Ich habe gerade ein Problem mit meinem kleinen Frontend Modul.

    Ich wollte gemäß Dokumentation das ganze mit dem AbstractFrontendModuleController lösen und das klappte bei einigen Modulen auch schon problemlos.
    Nun benötige ich für das jetzige eine Erweiterung des Pfades mit auto_item.

    Hierzu habe die Seite entsprechen in der Seitenstruktur angelegt, dass das Element erforderlich ist.
    Im Debug-Mode funktioniert alles problemlos.
    Sobald ich aber diesen deaktivere bekomme ich wieder ein 404.
    In den Logs findet sich dann folgendes:
    Code:
    [2022-08-30T16:31:30.703490+02:00] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException:
    "Unused arguments: auto_item" at /...path_to_contao.../vendor/contao/core-bundle/src/EventListener/ExceptionConverterListener.php line 97
    {"exception":"
    [object] (Symfony\\Component\\HttpKernel\\Exception\\NotFoundHttpException(code: 0):
    Unused arguments: auto_item at /...path_to_contao.../vendor/contao/core-bundle/src/EventListener/ExceptionConverterListener.php:97)
    [previous exception] [object] (Contao\\UnusedArgumentsException(code: 0): Unused arguments: auto_item at /...path_to_contao.../vendor/contao/core-bundle/src/Resources/contao/classes/FrontendTemplate.php:144)"} []
    Das auto_item lese ich momentan in der getResponse-Funktion meines Frontend Modules aus.
    PHP-Code:
    class PlayerModule extends AbstractFrontendModuleController
    {
      protected function 
    getResponse(Template $templateModuleModel $modelRequest $request): Response
      
    {
        
    $player Players::findByAlias(Input::get('auto_item'));
        if (!
    $player) {
          throw new 
    PageNotFoundException('Page not found');
        }
        [...]
      }

    Kann mir bitte jemand helfen, welchen Denkfehler ich da gerade noch habe?

    Legacy-Routing ist in der config.yml deaktiviert, da ich ohne HTML suffix arbeiten wollte.

    Grüße
    dome

  2. #2
    Contao-Nutzer
    Registriert seit
    04.07.2011.
    Beiträge
    11

    Standard

    Habe einen workaround gefunden, auch wenn er sich irgendwie komisch anfühlt

    Ich habe einen neuen PageController erstellt, der gemäß Dokumentation (https://docs.contao.org/dev/framewor...entcomposition) sich genauso wie eine reguläre Seite verhält, aber zusätzlich noch das auto_item ausliest. Das wird zwar an der Stelle nicht weiterverarbeitet, aber immerhin ist der 404 nun weg.

    Danke an alle die sich Gedanken gemacht haben!

  3. #3
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    auto_item so abzugreifen sollte an sich funktionieren.
    » sponsor me via GitHub or PayPal or Revolut

  4. #4
    Contao-Fan Avatar von markocupic
    Registriert seit
    06.12.2010.
    Ort
    Oberkirch (Schweiz)
    Beiträge
    660

    Standard

    Hatte beim Updaten einer Erweiterung für den Einsatz unter Contao 5 ein ähnliches Problem:

    Habe es so gelöst:

    PHP-Code:
    <?php

    declare(strict_types=1);

    namespace 
    App\Controller\FrontendModule;

    use 
    Contao\CoreBundle\Controller\FrontendModule\AbstractFrontendModuleController;

    use 
    Contao\CoreBundle\Framework\Adapter;
    use 
    Contao\CoreBundle\Framework\ContaoFramework;
    use 
    Contao\CoreBundle\ServiceAnnotation\FrontendModule;
    use 
    Contao\Input;
    use 
    Contao\ModuleModel;
    use 
    Contao\Template;
    use 
    Symfony\Component\HttpFoundation\Request;
    use 
    Symfony\Component\HttpFoundation\Response;

    /**
     * @FrontendModule(TestController::TYPE, category="test_modules", template="mod_test")
     */
    class TestController extends AbstractFrontendModuleController
    {
        public const 
    TYPE 'test';

        protected 
    ContaoFramework $framework;
        protected ?
    string $item null;

        
    // Adapters
        
    protected Adapter $input;

        public function 
    __construct(ContaoFramework $framework)
        {
            
    $this->framework $framework;

            
    // Adapters
            
    $this->input $this->framework->getAdapter(Input::class);
        }

        public function 
    __invoke(Request $requestModuleModel $modelstring $section, array $classes null): Response
        
    {

            
    // Set the item from the auto_item parameter and remove auto_item from unused route parameters
            
    if (isset($_GET['auto_item']) && '' !== $_GET['auto_item']) {
                
    $this->input->setGet('auto_item'$_GET['auto_item']);
            }

            
    // It's important to call Input::get('auto_item') at least once,
            // otherwise Contao throws a Symfony\Component\HttpKernel\Exception\NotFoundHttpException (unused argument auto_item)
            
    $item $this->input->get('auto_item') ?? false;

            if (!
    $item) {
                return new 
    Response(''Response::HTTP_NO_CONTENT);
            }

            
    $this->item $item;

            return 
    parent::__invoke($request$model$section$classes);
        }

        protected function 
    getResponse(Template $templateModuleModel $modelRequest $request): Response
        
    {
            
    $template->foo 'bar';

            return 
    $template->getResponse();
        }
    }
    Geändert von markocupic (03.09.2022 um 16:43 Uhr)
    Anfragen für bezahlten Support oder Extension-Programmierung via PN.

  5. #5
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.114
    Partner-ID
    10107

    Standard

    Wie gesagt, das sollte alles nicht notwendig sein. Wenn hier ein Bug vorliegt, dann sollte das auf GitHub reported werden.
    » sponsor me via GitHub or PayPal or Revolut

  6. #6
    Contao-Fan Avatar von markocupic
    Registriert seit
    06.12.2010.
    Ort
    Oberkirch (Schweiz)
    Beiträge
    660

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Wie gesagt, das sollte alles nicht notwendig sein. Wenn hier ein Bug vorliegt, dann sollte das auf GitHub reported werden.
    https://github.com/contao/contao/issues/5252
    Anfragen für bezahlten Support oder Extension-Programmierung via PN.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •