Du kannst dich auch an die Basis Anleitung aus der Dokumentation halten: https://docs.contao.org/dev/getting-...g-development/
Du kannst dich auch an die Basis Anleitung aus der Dokumentation halten: https://docs.contao.org/dev/getting-...g-development/
Also im Browser funktioniert nun alles, allerdings habe ich die Route als Endpoint konfiguriert. Wenn ich einen Webhook darauf ausführe bekomme ich letzt leider einen 400er Bad Request ErrorVorher hatte ich es als Annotation konfiguriert, da hat es funktioniertPHP-Code:
<?php
// src/Controller/DefaultController.php
class DefaultController extends Controller
{
private $db;
public function __construct(Connection $db)
{
$this->db = $db;
}
public function __invoke(Request $request)
{
$response = new Response(
'Sample Response.'
);
return $response;
}
}
?>Woran kann das nur liegen?PHP-Code:
<?
/**
* @Route("/stripe")
*
* @return JsonResponse
*/
public function stripeAction()
{
echo 'demoresponse';
}
?>
Geändert von Spooky (14.11.2019 um 15:23 Uhr)
Moderation: PHP code bitte in [php] Tags posten.
Generell: sieh dir mal den PSR-1 Standard an. Du solltest keine PHP Closing Tags in PHP Dateien verwenden. Und auch keine PHP Short Open Tags ("<?").
Hey Spooky,
danke für den Hinweis, ich geh den PSR-1 Guide durch.
Ich hab den Code nur für den Post in <? ?> gekapselt und nur Stücken reinkopiert, der "Echte Code" ist Standardkonform und benutzt ja auch namespaces und uses
Es hat übrigens jetzt auch geklappt, indem ich die Annotation wieder eingebaut habe.
Vielen Dank für deine Mühe!
Und wie bekommt man "Hello World" nun per JS auf den Bildschirm gezaubert? Wenn ich z. B. eine Frontend-Modul "Eigener HTML-Code" unter Themes anlege, müsste ich das doch nun irgendwie auf den Screen kriegen?
PHP-Code:
// src/Controller/DefaultController.php
namespace App\Controller;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
class DefaultController
{
/**
* @Route("/ajax")
*
* @return JsonResponse
*/
public function ajaxAction()
{
return new JsonResponse(['Hello World!']);
}
}
Geändert von Sitting Bull (16.01.2020 um 09:45 Uhr)
Niemand eine Idee?
Irgendwie fehlt mir hier nur der zündende Funke. Ist doch eigentlich bestimmt ganz einfach?
Danke im Voraus für helfende Tipps!
Ich verstehe die Frage nicht ganz. Wo genau brauchst du Hilfe?
Hi Spooky,
ich muss doch irgendwo im Frontend-Template den Ajax-Aufruf machen und dann die Antwort auswerten, also quasi ein JS-Script, so wie hier z. B.
Was wäre z. B. die richtige URL?Code:$.ajax({ url: "php/getInfo.php", data: {name: "AxxG", id: event.target.id}, datatype: "json", type: "POST", success: function(data) { clickJStoPHPResponse(data); } });
Die URL weißt nur du selbst. In dem von dir gepostet Code hast du folgende Route eingestellt:Code:@Route("/ajax")
Das kommt darauf an. Die volle absolute URL dieser Route wäre https://example.org/ajax
Habe jetzt einfach mal als HTML-Code bei Contao folgendes eingegeben:
hier bekomme ich auf jeden Fall mal die Meldung "fail" zurück. Mit @Route("/ajax") als URL kommt garnichts, auch kein "fail"?!HTML-Code:<script> var jqxhr = $.ajax("/ajax") .done(function() { alert( "done" ); }) .fail(function() { alert( "fail" ); }) .always(function() { alert( "always" ); }); </script>
Ich hatte Deinen Beispiel-Code vom 10.05.2017 in diesem Thread als Vorlage genommen, quasi 1:1 so eingebaut.
Funktioniert die URL überhaupt?
Nein, die URL ist wenn dann cto4cm.local/ajax
Was passiert wenn du die URL aufrufst? Ist dein Service und die Routes korrekt registriert?
Hier ein Beispiel:
https://github.com/hh-com/contao-simpleajaxrouting
lg
Bezüglich dem
das Problem hatte ich auch, als ich versuchte eine 3.5 Extension zu portieren.HTML-Code:Attempted to load class "Database" from the global namespace.
Das Problem ist, dass hier mit Relativen Contao Namespacing gearbeitet wurde.
und nicht wie es sein sollte:PHP-Code:
<?php
\Database::getInstance();
Um das Problem zu lösen habe ich mir die Contao\CoreBundle\Controller\FrontendController Klasse angeschaut.PHP-Code:
<?php
\Contao\Database::getInstance();
Der Trick ist, es benötigt für das Registrieren der globalen Namespaces einen Aufruf von $this->initializeContaoFramework();
PHP-Code:
<?php
use Contao\CoreBundle\Controller\AbstractController;
class AjaxController extends AbstractController {
/**
* @Route("/ajax")
*/
public function ajax()
{
$this->initializeContaoFramework();
//... more code
}
}
Geändert von gebi84 (13.05.2020 um 13:14 Uhr)
Tastaturberuf | Code with ♥ and Contao.
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)