Ergebnis 1 bis 11 von 11

Thema: Routing funktioniert nicht

  1. #1
    Contao-Nutzer
    Registriert seit
    19.04.2016.
    Beiträge
    130

    Standard Routing funktioniert nicht

    Hi!

    ich habe kürzlich eine uralte Standard Contao Version auf die Managed Version aktualisiert.

    Das hat soweit funktioniert.

    Es gibt aber leider noch ein Problem. Auf der Seite gibt es eine Bezahlfunktion, die mit dem Payum Bundle umgesetzt ist.
    Leider funktioniert das nicht, ich vermute das Routing funktioniert nicht.
    Ich leite in einem Schritt auf
    Code:
    order/payment/id/11/patient
    weiter. Erhalte dann aber immer einen 404 Error.

    Der Payment Controller sieht so aus:

    Code:
    /**
    	 * @Route("/order/payment/id/{inquiry_id}/{payment_method}", name="generatePayment")
    	 */
        public function generatePaymentAction(Request $request, $inquiry_id, $payment_method = "offline")
        {
    	   if(!$request->getSession()->get('fromOrder')){
                die("no access");
           }
    
        	// get order from inquiry
    	    $inquiry = $this->getDoctrine()->getRepository("OrderBundle:Inquiry")->find($inquiry_id);
        	$order = $this->getDoctrine()->getRepository("OrderBundle:OnlineOrder")->generateOrderFromInquiry($inquiry, false);
    
    
    	    $gatewayName = $payment_method;
            $storage = $this->get('payum')->getStorage('firm\OrderBundle\Entity\Payment');
    
    	    /** @var  $payment Payment*/
            $payment = $storage->create();
            $payment->setNumber(uniqid());
            $payment->setCurrencyCode('EUR');
            $payment->setTotalAmount($order->getTotalAmount() * 100); // we need cent here
            $payment->setClientId($order->getClientData()->getMemberId());
            $payment->setClientEmail($order->getClientData()->getEmail());
    
    	    // set firm values
    	    $payment->setClientDataId($order->getClientData()->getId());
    	    $payment->setCreatedAt(new \DateTime("now"));
    		$payment->setDetails(array());
    	    //$payment->setDetails(array());
    		$payment->setDescription('Order Number: '.$order->getOrderNr());
    
    		$payment->setPaymentMethodStr($payment_method);
    
            $storage->update($payment);
    
            $captureToken = $this->get('payum')->getTokenFactory()->createCaptureToken(
                $gatewayName,
                $payment,
                'paymentDone', // <- route
    	        array('iid' => $inquiry_id)
            );
    		//die($captureToken->getTargetUrl());
            return $this->redirect($captureToken->getTargetUrl());
        }
    Die Filestruktur ist leider etwas ungünstig:

    Code:
    app
    -config
    assets
    files
    src
    -firm
    --admin-backend-bundle
    --catalog-bundle
    .
    .
    .
    --order-bundle
    ---src
    ----ContaoManager
     -----Plugin.php
    ----Controller
     -----PaymentController.php
     -----BasketController.pph
    ----Entity
    ----Interfaces
    ----Module
    ----Repository
    ----Resources
    ----Tests
    ----OrderBundle.php
    
    usw
    ich hatte damals für alles ein Bundle gemacht

    Wenn ich route:match verwende kommt:

    Code:
    [OK] Route "contao_frontend" matches
    
     Property          | Value                                                        
    +--------------+--------------------------------------------------------------+
    | Route Name    | contao_frontend                                              
    | Path               | /{alias}                                                     
    | Path Regex     | #^/(?P<alias>.+)$#sD                                         
    | Host               | ANY                                                          
    | Host Regex     |                                                              
    | Scheme          | ANY                                                          
    | Method           | ANY                                                         
    | Requirements  | alias: .+                                                    
    | Class              | Symfony\Component\Routing\Route                              
    | Defaults          | _controller: ContaoCoreBundle:Frontend:index                 
    |                       | _scope: frontend                                             
    |                       | _token_check: true                                           
    | Options           | compiler_class: Symfony\Component\Routing\RouteCompiler      
    | Callable          | Contao\CoreBundle\Controller\FrontendController::indexAction 
    +--------------+--------------------------------------------------------------+
    Hätte jemand ne Idee was falsch sein könnte?

    LG
    D.

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

    Standard

    Das Contao Manager Plugin für die Applikation muss einem der folgenden FQCNs entsprechen:

    • ContaoManagerPlugin
    • App\ContaoManager\Plugin


    Ich vermute mal das ist bei dir nicht der Fall - und daher werden auch die Routes nicht geladen.

  3. #3
    Contao-Nutzer
    Registriert seit
    19.04.2016.
    Beiträge
    130

    Standard

    Hi Spooky,

    danke für Deine Antwort.

    Doch das Contao Manager Plugin ist vorhanden unter:

    -app
    --config
    --ContaoManagerPlugin.php

    Code:
    <?php
    
    use Contao\ManagerPlugin\Bundle\Config\BundleConfig;
    use Contao\ManagerPlugin\Bundle\BundlePluginInterface;
    use Contao\ManagerPlugin\Bundle\Parser\ParserInterface;
    
    
    class ContaoManagerPlugin implements BundlePluginInterface
    {
        /**
         * {@inheritdoc}
         */
        public function getBundles(ParserInterface $parser)
        {
            return [
                BundleConfig::create(Payum\Bundle\PayumBundle\PayumBundle::class)
                    ->setLoadAfter([
                        \Contao\CoreBundle\ContaoCoreBundle::class
                    ]),
                BundleConfig::create(\firm\AdminBackendBundle\AdminBackendBundle::class)
                    ->setLoadAfter([
                        \Contao\CoreBundle\ContaoCoreBundle::class
                    ]),
                BundleConfig::create(\firm\CatalogBundle\CatalogBundle::class)
                    ->setLoadAfter([
                        \Contao\CoreBundle\ContaoCoreBundle::class
                    ]),
                BundleConfig::create(\firm\ClientBackendBundle\ClientBackendBundle::class)
                    ->setLoadAfter([
                        \Contao\CoreBundle\ContaoCoreBundle::class
                    ]),
                BundleConfig::create(\firm\ClientBundle\ClientBundle::class)
                    ->setLoadAfter([
                        \Contao\CoreBundle\ContaoCoreBundle::class
                    ]),
                BundleConfig::create(\firm\CoreBundle\CoreBundle::class)
                    ->setLoadAfter([
                        \Contao\CoreBundle\ContaoCoreBundle::class
                    ]),
                BundleConfig::create(\firm\FrontendBundle\FrontendBundle::class)
                    ->setLoadAfter([
                        \Contao\CoreBundle\ContaoCoreBundle::class
                    ]),
                BundleConfig::create(\firm\ImportBundle\ImportBundle::class)
                    ->setLoadAfter([
                        \Contao\CoreBundle\ContaoCoreBundle::class
                    ]),
                BundleConfig::create(\firm\OrderBundle\OrderBundle::class)
                    ->setLoadAfter([
                        \Contao\CoreBundle\ContaoCoreBundle::class
                    ]),
                BundleConfig::create(\firm\SearchBundle\SearchBundle::class)
                    ->setLoadAfter([
                        \Contao\CoreBundle\ContaoCoreBundle::class
                    ])
            ];
        }
    }

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

    Standard

    Ok, aber du lässt dort keine Routes laden.

    https://docs.contao.org/dev/framewor...lugininterface

    PHP-Code:
    use Contao\ManagerPlugin\Routing\RoutingPluginInterface;
    use 
    Symfony\Component\Config\Loader\LoaderResolverInterface;
    use 
    Symfony\Component\HttpKernel\KernelInterface;

    class 
    ContaoManagerPlugin implements RoutingPluginInterface
    {
        public function 
    getRouteCollection(LoaderResolverInterface $resolverKernelInterface $kernel)
        {
            return 
    $resolver
                
    ->resolve('/path/to/routes.yaml')
                ->
    load('/path/to/routes.yaml')
            ;
        }


  5. #5
    Contao-Nutzer
    Registriert seit
    19.04.2016.
    Beiträge
    130

    Standard

    Ich implementiere dort ja das BundlePluginInterface.


    Wie kann ich denn beide implementieren, ich kann das ja nicht einfach weglassen?

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

    Standard

    Zitat Zitat von Dnageiw Beitrag anzeigen
    Ich implementiere dort ja das BundlePluginInterface.
    Mit dem BundlePluginInterface lädst du Bundles. Mit dem RoutingPluginInterface lädst du Routes.


    Zitat Zitat von Dnageiw Beitrag anzeigen
    Wie kann ich denn beide implementieren, ich kann das ja nicht einfach weglassen?
    Einfach beide implementieren - dafür sind Interfaces ja da
    PHP-Code:
    class ContaoManagerPlugin implements BundlePluginInterfaceRoutingPluginInterface
    {
        public function 
    getBundles(ParserInterface $parser): array
        {
            return [
                
    BundleConfig::create(MyBundle::class)
                    ->
    setLoadAfter([ContaoCoreBundle::class]),
            ];
        }

        public function 
    getRouteCollection(LoaderResolverInterface $resolverKernelInterface $kernel): ?RouteCollection
        
    {
            return 
    $resolver
                
    ->resolve(__DIR__.'/../Resources/config/routing.yml')
                ->
    load(__DIR__.'/../Resources/config/routing.yml')
            ;
        }

    Geändert von Spooky (19.08.2020 um 12:52 Uhr)

  7. #7
    Contao-Nutzer
    Registriert seit
    19.04.2016.
    Beiträge
    130

    Standard

    Danke nochmal fürs Anpassen, das hatte ich zum Glück schon so umgesetzt, wäre ja peinlich wenn nicht

    Das Routing scheint jetzt auch zu funktionieren, danke!

    Es gibt jetzt "immerhin" einen 500er Fehler.
    Mal sehen woran das liegt.

    Danke für Deine Hilfe

  8. #8
    Contao-Nutzer
    Registriert seit
    19.04.2016.
    Beiträge
    130

    Standard

    Guten Tag allerseits,

    Sorry wenn ich das nach so langer Zeit nochmal auskrame.

    Ich hänge leider noch immer an dem neuen Fehler.

    Der hängt mit dem Payum Bundle zusammen.
    Immer wenn ich eine Bezahlung machen möchte kommt der Fehler:

    Code:
    Uncaught PHP Exception Payum\Core\Exception\InvalidArgumentException: "Gateway factory "offline" does not exist." at /vendor/payum/core/Payum/Core/Registry/AbstractRegistry.php line 117 {"exception":"[object] (Payum\\Core\\Exception\\InvalidArgumentException(code: 0): Gateway factory \"offline\" does not exist. at vendor/payum/core/Payum/Core/Registry/AbstractRegistry.php:117)"} []
    Meine config dazu sieht so aus:

    PHP-Code:
    gateways:
            
    core:
              
    payum.template.layoutOrderBundle::layout.html.twig
            prepayment
    :
              
    factoryoffline
            invoice
    :
              
    factoryoffline
            e112
    :
              
    factoryoffline
            patient
    :
              
    factoryoffline
            paypal_express
    :
              
    factorypaypal_express_checkout
              username
    : ****
              
    password: ****
              
    signature: ****
              
    sandboxtrue
            stripe_js
    :
              
    factorystripe_js
              publishable_key
    : ****
              
    secret_key: ****
              
    payum.template.layoutOrderBundle::stripe.html.twig 
    In der Composer verwende ich das
    "payum/payum-bundle": "2.1",

    auch wenn ich eine der Varianten für stripe bzw. paypal nutze kommt der Fehler mit "Gateway factory "offline" does not exist". Es scheint also hier schon ein Problem zu geben.

    Im log sehe ich aber folgende request:

    Code:
    request.INFO: Matched route "generatePayment". {"route":"generatePayment","route_parameters":{"payment_method":"stripe_js","_controller":"BasketController::generatePaymentAction","inquiry_id":"5","_route":"generatePayment"},"request_uri":"/order/payment/id/5/stripe_js","method":"GET"} []
    Hat jemand irgendeine Idee wo ich da noch bei der Fehlersuche ansetzen kann?

    Danke euch und LG
    D.

    P.S.
    Was mit eben noch aufgefallen ist: Im BE wird die Versionsnummer nicht angezeigt, s. Bild
    Angehängte Grafiken Angehängte Grafiken
    Geändert von Dnageiw (10.11.2020 um 16:13 Uhr)

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

    Standard

    Ich denke für solche Fragen ist das vielleicht das falsche Forum. Vielleicht kannst du das direkt auf GitHub fragen?

  10. #10
    Contao-Nutzer
    Registriert seit
    19.04.2016.
    Beiträge
    130

    Standard

    ok, danke mache ich.

    Zur fehlenden Versionsnummer hast du auch keine Idee?

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

    Standard

    Zitat Zitat von Dnageiw Beitrag anzeigen
    Zur fehlenden Versionsnummer hast du auch keine Idee?
    Vermutlich benutzt du Composer 2?

    https://github.com/contao/contao/issues/2464

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
  •