Download the PHP package heimrichhannot/contao-ajax-bundle without Composer
On this page you can find all versions of the php package heimrichhannot/contao-ajax-bundle. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download heimrichhannot/contao-ajax-bundle
More information about heimrichhannot/contao-ajax-bundle
Files in heimrichhannot/contao-ajax-bundle
Package contao-ajax-bundle
Short Description Keep contao ajax requests organized and handle responses with ease.
License LGPL-3.0-or-later
Homepage https://github.com/heimrichhannot/contao-ajax-bundle
Informations about the package contao-ajax-bundle
Contao Ajax Bundle
Ajax requests within contao are not centralized by default. Due to the handling of ajax requests within different types of modules
a simple \Environment::get('isAjaxRequest') is not enough to delegate the request to the related module / method.
This module provides a global configuration, where you can attach your module within $GLOBALS['AJAX']
as a custom group and
add your actions with the required parameters that should be checked against the request.
Technical instruction
The following section will show you how your custom ajax actions can be registered and triggered.
1. Configuration / Setup
The following example shows the [heimrichhannot/contao-formhybrid] (https://github.com/heimrichhannot/contao-formhybrid) ajax configuration.
As you can see, we have a group formhybrid
that delegates all ajax request with this group
parameter to formhybrid.
Then there are some actions toggleSubpalette
, asyncFormSubmit
and so on. These mehtod must be present with the same name in the delegated context.
You can provide arguments, that should be called within the function and added as arguments to the method. If the argument is optional
, than the request
will be valid if the argument is not present, otherwise all arguments
must be present in the request, to have a valid ajax request.
If you want to protect the ajax request against cross site violations, than add csrf_protection => true
to your configuration and dont forget to update the ajax url on each request!
2. How can i create the url to my ajax action?
We provide a simple helper method within HeimrichHannot\AjaxBundle\Manager\AjaxActionManager
that is called generateUrl
. The following example shows, how we
create the toggleSubpalette
url within FormHybrid
.
As you can see, we do not add the arguments by default. This is done within the associated javascript code for toggleSubpalette
.
You have to check within your javascript code, that the arguments subId
, subField
, subLoad
are provided as $_POST parameters within the
ajax request by your own.
3. How are my ajax actions triggered?
The give you the biggest possible freedom, we decided to be always within contao context. Therefore all request preconditions are checked within the default contao request-cycle.
In case of the toggleSubpalette
example we trigger the action within DC_Hybrid::__construct()
and provide a new FormAjax($this)
as Response Context.
CAUTION: Don't call "runActiveAction" in generate() of a Contao module since that's too late. It's always best to run it in __construct().
So what is done here?
- The ajax action is requested from your javascript code.
- The ajax action is delegated to the current page, where our
DC_Hybrid
extended Module is available. - The
Ajax
Controller will check the request against the given parameters fortoggleSubpalette
from the$GLOBALS['AJAX']
config. - If all requirements were meet, and the method
toggleSubpalette
is available within the given contextnew FormAjax($this)
, the method is trigged with the given arguments. - Now you can do your module related stuff within
toggleSubpalette
- If you want to return data to the ajax request, then you have to return a valid
HeimrichHannot\AjaxBundle\Response\Response
Object. - The returned
HeimrichHannot\AjaxBundle\Response\Response
Object will be converted to a JSON Object and the request will end here.
Response Objects
Currently we implemented three response objects.
HeimrichHannot\AjaxBundle\Response\ResponseSuccess
HeimrichHannot\AjaxBundle\Response\ResponseError
HeimrichHannot\AjaxBundle\Response\ResponseRedirect
ResponseSuccess
This will return a JSON Object with the HTTP-Statuscode HTTP/1.1 200 OK
to the ajax action.
Example:
Client-Side:
Server-Side:
ResponseError
This will return a JSON Object with the HTTP-Statuscode HTTP/1.1 400 Bad Request
to the ajax action.
Example:
Client-Side:
Server-Side:
ResponseRedirect
This will return a JSON Object with the HTTP-Statuscode HTTP/1.1 301 Moved Permanently
to the ajax action.
The redirect url is provided within the xhr response object result.data.url
;
Example:
Client-Side:
Server-Side:
Unit Testing
For unit testing, define the variable UNIT_TESTING
as true
within the $GLOBALS.
Than you are able to catch the ajax result within you test, by catching the HeimrichHannot\AjaxBundle\Exception\AjaxExitException
.
All versions of contao-ajax-bundle with dependencies
contao/core-bundle Version ^4.13 || ^5.0
heimrichhannot/contao-utils-bundle Version ^2.217 || ^3.0
symfony/http-foundation Version ^5.4 || ^6.0