Backend Ajax protocol

= Discussion =

There should be a standard JSON protocol between the LS backend and Ajax calls to check for errors, permissions and if the user still is logged in. A suggestion would be to wrap  in a function that checks this for you, like.

All server Ajax calls must return a JSON in the following format:

Of course there needs to be server side support for this protocol, too, with helper functions to output correct JSON code, e.g.  or.

Preferably, the function should be able to show an error if server throws 500.

Message types
= Backbone =

Since Javascript library Backbone might be used in the future, it would be nice to know how they handle stuff like this.

Some questions:


 * Would we need to duplicate the model code in both backend and frontend? Yes, we would need to code validation in both Backbone model and Yii model. Or, we don't use the module system at all from Backbone, and just send submit data to server (serialized forms).
 * How much of the CRUD will happen on client? All of it. REST is used to sync client to server.
 * How much would backbone replace Yii and things generated with Gii?
 * Would all views be put on the client? I'd prefer if we didn't split views between server and client. Here using Mustache would be a clear advantage, since it easily can be used from both Yii and Backbone. Or we can configure Twig to look like Underscore templates. Olle (talk) 20:43, 28 September 2016 (CEST)
 * LS will probably never be a single-page application, which means Backbone will be used on a per-module or per-page basis, to make Ajax operations more smooth.
 * It would be interesting to make a plugin to showcase how Backbone can be used inside LS.

Underscore
Example:

Logger
We need a front-end logger, and there's a couple of libraries to Backbone that does this, e.g. this one.

Learning material

 * http://backbonejs.org/
 * Youtube tutorial
 * Free book

= Class diagrams =



Source.

= Implementation =

A first prototype of the backend classes can be seen here. Instead of a helper, this class can actually be put into LSYiiController, making it available to all controllers in LS.

Example:

Using  instead of   will automatically take care of login and success/failure messages, provided you use the ajax helper above to output json from PHP.