oli_oli_ MemberComments: 6 Received thanks: 1 Member since: July 23

Die statische Code-Analyse meines Plugins schlägt fehl:

A not allowed file or folder was found, Context: [expected namespace: composer.json/, found namespace: src/]
the required composer.json file was not found
the required composer.json file was not found

Warnings:
Warnings of the static code analysis:
------ ------------------------------------------------------------------ 
  Line   src/Subscriber/StoreFront.php                                     
 ------ ------------------------------------------------------------------ 
  36     Class Shopware\Storefront\Event\StorefrontRenderEvent not found.  
 ------ ------------------------------------------------------------------ 

 [ERROR] Found 1 error   

Zur composer.json: Ist vorhanden.

Bei den Warnings meckert er, dass das die Klasse nicht gefunden wurde, was geht hier schief? Meine StoreFront Klasse sieht in etwa so aus:

use Shopware\Storefront\Event\StorefrontRenderEvent;

class StoreFront implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return [
            StorefrontRenderEvent::class => 'onStorefrontRender',
        ];
    }

Funktionieren tut das Plugin ebenfalls einwandfrei.

Thanked by 1flix

Answers

  • simklisimkli MemberComments: 1281 Received thanks: 468 Member since: February 2014

    1. Die composer.json muss ins Hauptverzeichnis, nicht in src/

    2. Du musst namespaces verwenden in deinem Plugin. namspace DeinPlugin/Storefront;

     

    VG

  • oli_oli_ MemberComments: 6 Received thanks: 1 edited August 5 Member since: July 23

    1. check

    2. check

    ohne diese Vorraussetzungen wäre das Plugin ja gar nicht lauffähig - habe lediglich den augescheinlich relevanten Teil der Datei gepostet

  • kilb_softwarekilb_software MemberComments: 10 Received thanks: 1 Member since: August 2017

    Ich kann den Fehler reproduzieren, ich erhalte beim Upload eines SW 6 Plugins ebenfalls die Fehlermeldung:

    A not allowed file or folder was found, Context: [expected namespace: composer.json/, found namespace: src/]
    the required composer.json file was not found
    the required composer.json file was not found

    Ich vermute einen Fehler in der statischen Code-Überprüfung.

  • Jens_KJens_K MemberComments: 55 Received thanks: 33 Member since: March 2017

    Moin!

    Könntet ihr einmal den Inhalt eurer composer.json und euer Plugin Bootstrap Datei hier posten?

  • oli_oli_ MemberComments: 6 Received thanks: 1 edited August 29 Member since: July 23

    Ich habs rausgefunden, folgendermaßen klappt es:

    ./custom/plugins/{technischerName}/composer.json - Auszug der relevanten Direktiven darin:

    {
      "extra": {
        "shopware-plugin-class": "{technischerName}\\{technischerName}",
      },
      "autoload": {
        "psr-4": {
          "{technischerName}\\": "src/"
        }
      }
    }

    /custom/plugins/{technischerName}/src/{technischerName}.php

    <?php declare(strict_types=1);
    
    namespace {technischerName};
    
    use Shopware\Core\Framework\Plugin;
    
    class {technischerName} extends Plugin
    {
    
    }

    Dann klappts auch mit der statischen Code-Analyse :)

  • kilb_softwarekilb_software MemberComments: 10 Received thanks: 1 Member since: August 2017

    @oli_ das heißt, ohne dem Herstellernamen als Teil des Namespaces funktioniert es? Laut Doku soll dieser aber enthalten sein.

  • kilb_softwarekilb_software MemberComments: 10 Received thanks: 1 Member since: August 2017

    @Jens_K: ich werde bei Gelegenheit mal ein einfaches Beispiel vorbereiten.

    Thanked by 1Jens_K
  • oli_oli_ MemberComments: 6 Received thanks: 1 Member since: July 23

    @kilb_software‍ der Herstellername ist in meinem Fall im technischen Namen und damit auch im Namespace enthalten.

  • kilb_softwarekilb_software MemberComments: 10 Received thanks: 1 edited October 1 Member since: August 2017

    @oli_‍ Laut Dokumentation sollte aber Herstellername und Technischer Name getrennt sein, im Beispiel:

    <?php declare(strict_types=1);
    
    namespace Swag\BaseClass;
    
    use Shopware\Core\Framework\Plugin;
    
    class BaseClass extends Plugin
    {
    }

    => Der technische Name lautet "BaseClass", nicht "SwagBaseClass". Andernfalls wäre es auch redundant, weil im gesamten Namespace der Herstellername zwei mal erscheinen würde. Den Herstellernamen als Teil des Namespaces zu entfernen und dem Teil des technischen Namen hinzuzufügen - so wie es bei Shopware 5 war - dürfte doch eigentlich nicht richtig sein, weil dei Dokumentation klar etwas anderes aussagt. Es wundert mich, dass es für Dich funktioniert. Vielleicht ist für die Shopware 6 Plugins noch die statische Code-Analyse für Shopware 5 (zum Teil) aktiv?

    Ich habe mal ein Beispiel-Plugin hochgeladen, bei dem der Fehler auftritt:

    https://www.dropbox.com/s/qzqkbacxw2y5tca/TestPlugin.zip?dl=0

    @Jens_K‍ vielleich kannst Du ja mal drauf schauen? Vielleicht übersehe ich auch etwas?

     

     

     

     

  • kilb_softwarekilb_software MemberComments: 10 Received thanks: 1 Member since: August 2017

    Ich habe mir die Sache noch einmal angeschaut.
    Wenn ein neues Plugin im Herstellerbereich angelegt wird, muss ein "Technischer Name" eingetragen werden. 

    Das erste Level in der hochzuladenden ZIP-File muss ein Verzeichnis sein, das diesem Technischen Namen entspricht. Entsprechend muss der Namespace und der Bootstrap-Klassename heißen. @oli_‍ liegt also damit richtig, dass der Herstellername der beginnende Teil des technischen Pluginnamens ist - weil die Oberfläche in Shopware aktuell nicht erlaubt, einen technischen Namen ohne Hersteller-Prefix festzulegen . Trotzdem funktioniert es, wenn der Herstellername als weiterer Teil des Namespaces bestehen bleibt. 

    Hier ein funktionierendes Beispiel:
    https://www.dropbox.com/s/zm0k1825ysh6q58/KilbTestPlugin_working.zip?dl=0

    Um die ZIP-Datei zu bauen, lege ich im Verzeichnis des Plugins parallel zum src-Verzeichnis und zur composer.json ein build.sh-Script mit folgendem Inhalt an:

    #!/usr/bin/env bash
    rm -f KilbTestPlugin.zip &&
    cd .. &&
    zip -9 -r KilbTestPlugin.zip ./KilbTestPlugin \
        -x "*.git*" \
           "*.idea*" \
           "*.DS_Store*" \
           "*build.sh" &&
    mv KilbTestPlugin.zip KilbTestPlugin/
    

    @Jens_K eventuell wäre es hilfreich, wenn in der Dokumentation
    - noch einmal darauf hingewiesen wird, dass der Plugin-Code in der Zip in einem Verzeichnis mit dem technischen Pluginname als Namen liegen muss

    und
    - auf das Herstellerprefix im technischen Namen eingegangen wird (also "Swag/SwagBaseClass" statt "Swag/BaseClass)
    oder
    - der Herstellername nicht mehr als Prefix für Shopware 6-Plugins vorausgesetzt wird.

  • zenitzenit MemberComments: 87 Received thanks: 9 Member since: November 2015

    Was ist eigentlich aus der Ausgangsfrage geworden?

    Warum zeigt die statische Code-Analyse für das StorefrontRenderEvent einen Fehler an?

  • flixflix MemberComments: 4 Received thanks: 0 Member since: January 2015

    Was ist eigentlich aus der Ausgangsfrage geworden?

    Warum zeigt die statische Code-Analyse für das StorefrontRenderEvent einen Fehler an?

    Ich habe das gleiche Problem. Hat jemand eine Lösung gefunden? 

  • TeichDatensystemeTeichDatensysteme MemberComments: 280 Received thanks: 34 Member since: December 2013

    Die Code-Analyse bemängelt bei mir nach wie vor alle Parameter in Subscribern (das diese angeblich nicht existieren).
    Ich hatte das dem Account-Team genannt mit der Antwort, dass die Code-Analyse noch fehlerhaft ist. Dementsprechend ignoriere ich die Meldungen, weil diese faktisch falsch sind.

  • ShyimShyim MemberComments: 890 Received thanks: 357 Member since: May 2015

    Der häufigste Fehler, dass vergessen wird shopware/storefront zu requiren wenn man Storefront sachen benutzt.

    @TeichDatensysteme‍ kannst du mir mal via PN den Fehler + Plugin Namen (technischen) sagen

    Thanked by 1zenit
  • zenitzenit MemberComments: 87 Received thanks: 9 Member since: November 2015

    Hi @Shyim‍ 

    kannst Du das ein wenig genauer erläutern? Hier ein verinfachtes Beispiel. Fehlt da was? 

     

    <?php declare(strict_types=1);
    
    namespace prefix\PluginName\Subscriber;
    
    use Symfony\Component\EventDispatcher\EventSubscriberInterface;
    use Shopware\Storefront\Event\StorefrontRenderEvent;
    
    
    class StorefrontRenderSubscriber implements EventSubscriberInterface
    {
    
    	/**
    	 * @return array
    	 */
    	public static function getSubscribedEvents(): array
    	{
    		return[
    			StorefrontRenderEvent::class => 'onStorefrontRender'
    		];
    	}
    
        /**
         * @param StorefrontRenderEvent $event
         */
    	public function onStorefrontRender(StorefrontRenderEvent $event)
    	{
            // foo
    	}
    }

     

  • ShyimShyim MemberComments: 890 Received thanks: 357 Member since: May 2015

    Hast du shopware/storefront required?

  • zenitzenit MemberComments: 87 Received thanks: 9 Member since: November 2015

    @Shyim

    achsooo Du meinst in der composer.json Sticking-out-tongue 
     

  • ShyimShyim MemberComments: 890 Received thanks: 357 Member since: May 2015

    Genau

Sign In or Register to comment.