it-swarm.com.de

So legen Sie den Ansichtsort in Joomla 4 fest

Ich erstelle eine Komponente namens DogWalk für Joomla 4 neu und habe versucht sicherzustellen, dass ich genau das tue, was die Kernkomponente Banners tut. Ich habe meine Dateien benannt und benannt, meine Verzeichnisse identisch mit Banners benannt, aber ich kann das BaseController nicht dazu bringen, meine Ansichtsdatei zu finden.

Ich entleere die $this->paths Array von BaseController::createView, und der Pfad ist der gleiche für Banners und für DogWalk:

array (size=1)
  'view' => 
    array (size=1)
      0 => string '/Users/mystuff/Sites/joomla4/administrator/components/com_dogwalk/views/'

Meine Komponente sucht jedoch nach einer Datei mit dem Namen mycomponentViewviewname, während der tatsächliche Name der Ansichtsklasse für Banners (und alle anderen Administratorkomponenten) nur HtmlView lautet. Außerdem wird die Ansichtsklasse Banners gefunden, obwohl sie sich in View befindet, nicht in views (trotz welcher $config Array sagt).

Wie definiere ich, wo der Controller meine Ansichten findet und welche Namenskonvention sie verwenden würden?

1
user101289

Vielen Dank an alle, die geholfen haben. Das Problem scheint die Datei services gewesen zu sein, nicht mein Pfad oder mein Namespace. Einmal habe ich eine Datei in administrator/services/provider.php alles begann automatisch zu arbeiten. Die Datei sah folgendermaßen aus:

return new class implements ServiceProviderInterface
{
    /**
     * Registers the service provider with a DI container.
     *
     * @param   Container  $container  The DI container.
     *
     * @return  void
     *
     * @since   4.0.0
     */
    public function register(Container $container)
    {
        $container->registerServiceProvider(new MVCFactory('\\Mycompany\\Component\\Mycomponent'));
        $container->registerServiceProvider(new ComponentDispatcherFactory('\\Mycompany\\Component\\Mycomponent'));

        $container->set(
            ComponentInterface::class,
            function (Container $container)
            {
                $component = new CategoriesComponent($container->get(ComponentDispatcherFactoryInterface::class));

                $component->setMVCFactory($container->get(MVCFactoryInterface::class));
                $component->setRegistry($container->get(Registry::class));

                return $component;
            }
        );
    }
};

Eine andere Sache, die ich hinzufügen musste, war das generische DisplayController sowohl im Administrator- als auch im Site-Verzeichnis Controller.

0
user101289

Die Ansichtsdatei, nach der Ihre Komponente sucht MycomponentViewViewname, die in Joomla 3 verwendet wurde. Stellen Sie daher sicher, dass Sie die richtige Controller-Klasse in Ihrem Controller erweitern (dh Joomla\CMS\MVC\Controller\BaseController Oder eine andere Klasse, die sie erweitert wie AdminController). Wenn es sich um einen korrekten Namespace handelt, verfolgen Sie setView() nach solchen Änderungen, die das Problem verursachen können.

Wenn dies Ihr Problem nicht löst, ist das Debuggen des gesamten Ablaufs die Option. Zuvor werde ich jedoch vorschlagen, die Erweiterung auf einem anderen neuen Joomla 4-Setup mit Standardparametern auszuführen (da sich möglicherweise einige Änderungen darauf auswirken, z. B. Codeänderungen oder Plugin-Überschreibungen).

Wenn Sie keine Lösung finden, können Sie die Methode setView() in Ihrem Controller nach Bedarf überschreiben (dies sollte die letzte Option sein).

Hoffe das könnte helfen. Teilen Sie uns die Lösung mit, sobald Sie sie gefunden haben.

1
Pratyush