Chargement...

AngularJs et symfony


AngularJS

Il est possible d'implémenter AngularJS dans Symfony mais il faut ajouter un petit morceau de code Javascript en plus pour éviter les conflits avec les caractères {{}}

var awesome = angular.module('awesome', []);

awesome.config(function($interpolateProvider) {
    $interpolateProvider.startSymbol('||');
    $interpolateProvider.endSymbol('||');
});

Routes et Symfony

Nous allons construire une application SPA (single page application), il nous faudra donc indiquer les routes utilisées comme ceci:

awesome.config(function($routeProvider, $interpolateProvider) {
      
  $interpolateProvider.startSymbol('||');
  $interpolateProvider.endSymbol('||');

  $routeProvider.
  when('/dashboard', {
    templateUrl: 'page/dashboard',
    controller: 'DashboardController'
  }).
  when('/customer', {
    templateUrl: 'page/customer',
    controller: 'CustomerController'
  }).
  when('/ticket/:id', {
    templateUrl : function(params){ return '/page/ticket/' + params.id; }, 
    controller: 'TicketController'
  }).
  otherwise({
    redirectTo: '/dashboard'
  });
});

Configurons notre routing.yml

engel_awesome_page:
    path:     /page/{page}
    defaults: { _controller: ENGELAwesomeBundle:Awesome:page }

Puis notre controller

namespace ENGEL\AwesomeBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class AwesomeController extends Controller
{
   
    /* Chargement d'une page */
    public function pageAction($page)
    {
        $method = $page.'Page';

        if( !method_exists( $this, $method ) )
            return $this->render('ENGELAwesomeBundle:Awesome:'.$page.'.html.twig');

        return $this->$method($page);
    }

    /* Le cas du dashboard */
    public function dashboardPage($page)
    {
        $data = DashboardController::getData();
        return $this->render('ENGELAwesomeBundle:Awesome:dashboard.html.twig', $data);
    }
}

Dans cet exemple nous essayons de rendre générique l'appel de /page/{page}, soit on passe par une méthode spécifique, soit on charge le template du même nom.

Puis adaptons notre controller angularjs

awesome.controller('DashboardController', function ($scope) {
  $scope.products = [
    {'name': 'ipad 1',
     'description': 'Super ipad'},
    {'name': 'ipad 2',
     'description': 'Un ipad encore mieux'},
    {'name': 'ipad 3',
     'description': 'Alors celui la il est encore mieux.'}
  ];
});

Et enfin nos liens qui permettent de passer d'une page à l'autre

<ul class="nav nav-sidebar">
    <li><a title="Tableau de bord" href="#/dashboard">Dashboard</a></li>
    <li><a title="Clients" href="#/customer">Customer</a></li>
</ul>



UNE QUESTION SUR L'ARTICLE?


CSSW Apprendre à créer son site web CSSW