TP AngularJS 7
TP AngularJS 7
TP AngularJS 7
AngularJS on PHP
Il est possible dintegrer AngularJS avec du PHP en tant que front-end. Dans ce cas lapplication en PHP fonctionnera
en tant que back-end. Le PHP aura pour r
ole de fournir les donnees `a AngularJS. Nous allons construire dans ce qui
suit un CRUD (create, read, update, delete) pour un produit. MySQL est utilise pour enregistrer les donnees et le
PHP assurera linteraction avec MySQL.
Building Database
Nous commencons par creer une base de donnees Firstly you create database, for instance mydatabase. Ensuite
nous allons creer une table appelee product. Voici une requete SQL pour creer la table product :
delimiter $$
CREATE DATABASE mydatabase /*!40100 DEFAULT CHARACTER SET utf8 */$$
CREATE TABLE product (
idproduct int(11) NOT NULL AUTOI N CREM EN T,
namevarchar(45)N OT N U LL,
pricef loatN OT N U LL,
createddatetimeN OT N U LL,
P RIM ARY KEY (idproduct)
)EN GIN E = InnoDBAU T O IN CREM EN T = 35DEF AU LT CHARSET = utf 8$$
Vous pouvez aussi cr
eer la table avec phpMyAdmin.
Voici un exemple :
Construction du Back-End
Au niveau du Back-End, on d
eveloppe une application PHP qui va interagir avec MySQL. Le
PHP assurer
egalement le lien avec AngularJS en utilisant le format de donn
ees JSON.
3.1
Gestion du CRUD
Pour g
erer les p
eration de CRUD nous cr
eons une classe Product dans le fichier Product.php
contenant le code suivant :
class Product {
private $dbserver = "localhost";
private $dbuser = "username";
private $dbpass = "password";
private $dbdatabase = "mydatabase";
private $msg = "";
public function getMsg()
{
return $this->msg;
}
}
$product = array();
try {
$mysqli = new mysqli($this->dbserver, $this->dbuser, $this->dbpass, $this->dbdatabase);
if ($mysqli->connecte rrno){
$this > msg = $mysqli > error;
return$product;
}
$query = selectidproduct, name, pricef romproduct;
if (!($stmt = $mysqli > prepare($query))){
$mysqli > close();
$this > msg = $mysqli > error;
return$product;
}
if (!$stmt > execute()){
$mysqli > close();
$this > msg = $stmt > error;
return$product;
}else{
$stmt > bindr esult($id, $name, $price);
while($stmt > f etch()){
$prices tring = numberf ormat((f loat)$price, 2,0 .0 ,00 );
arrayp ush($product, array(id => $id, name => $name, price => $prices tring));
}
}
$stmt > close();
$mysqli > close();
}catch(Exception$e){
$this > msg = $e > getM essage();
}
return$product;
}
Pour ins
erer un nouveau produit, nous cr
eons une fonction appel
ee insertProduct() avec
le code suivant :
public function insertProduct($name,$price)
{
$product = -1;
try {
$mysqli = new mysqli($this->dbserver, $this->dbuser, $this->dbpass, $this->dbdatabase);
if ($mysqli->connecte rrno){
$this > msg = $mysqli > error;
return$product;
}
$query = insertintoproduct(name, price, created)values(?, ?, now());
if (!($stmt = $mysqli > prepare($query))){
$mysqli > close();
$this > msg = $mysqli > error;
return$product;
}
$newprice = f loatval($price);
$stmt > bindp aram(0 sd0 , $name, $newprice);
if (!$stmt > execute()){
$mysqli > close();
$this > msg = $stmt > error;
return$product;
}
$product = 1;
$this > msg = ;
$stmt > close();
$mysqli > close();
}catch(Exception$e){
$this > msg = $e > getM essage();
}
return$product;
}
Pour mettre `
a jour une donn
ee, nous avons besoin de lid pour identifier la donn
ee qui
sera mise `
a jour. Voici une impl
ementation de la fonction updateProduct() :
return $product;
}
$query = "delete from product where idproduct=?";
if (!($stmt = $mysqli->prepare($query))) {
$mysqli->close();
$this->msg = $mysqli->error;
return $product;
}
$stmt->bindp aram(0 d0 , $id);
if (!$stmt > execute()){
$mysqli > close();
$this > msg = $stmt > error;
return$product;
}
$product = 1;
$this > msg = ;
$stmt > close();
$mysqli > close();
}catch(Exception$e){
$this > msg = $e > getM essage();
}
return$product;
}
Enregistrez votre code.
3.2
} <?php
require once(Product.php);
$data = file get contents(php://input);
$json = json decode($data);
$op = $json->{op};
if(isset($op)){
switch($op){
default:
$ret = -999;
$resp = array(code => $ret, msg => invalid operation);
echo json encode($resp);
break;
}
}else{
$ret = -999;
$resp = array(code => $ret, msg => invalid operation);
header(Content-Type: application/json);
header(Access-Control-Allow-Origin: *);
echo json encode($resp);
}
` laide
Vous pouvez constater que nous utilisons Product.php et lire les donn
ees JSON a
de jsond ecode().Onv
erif iel0 attributcheckoppouridentif ierletyped0 op
eration`
aef f ectuer.Siunerequ
eteposs`
edeunopinvalidealor
case "getproducts":
$obj = new Product();
$ret = $obj->getProducts();
$count = count($ret,1);
$msg = $obj->getMsg();
if(empty($msg)) {
$resp = array(code => -1, msg => $msg);
}else{
} $resp = array(code => 1, msg => ,data => $ret);
header(Content-Type: application/json);
header(Access-Control-Allow-Origin: *);
header(Access-Control-Allow-Methods: GET, POST);
echo json encode($resp);
break;
Vous pouvez constater que nous avons plac
e un header pour Access-Control-Allow-Origin
pour g
erer les acc`
es crois
es. Ceci signifie que vous pouvez d
eployer lapplication PHP
dans http://api.mydomain/ et le front-end est d
eploy
e dans http://mydomain/. La deuxi`
eme
op
eration concerne lenregistrement. Elle g`
ere linsertion et la mise `
a jour des donn
ees.
Si une requ
ete ne pr
ecise pas un id, une nouvelle donn
ee est ins
er
ee. Sinon, elle mettra
`
a jour la donn
ee relative `
a lid. Voici un exemple dimpl
ementation de la fonction service
save.
case "save":
$id = $json->{data.id};
$name = $json->{data}->{name};
$price = $json->{data}->{price};
$obj = new Product();
$code = -1;
if(empty($id) || $id="") {
// insert new product
$code = $obj->insertProduct($name,$price);
}else{
// update product
$code = $obj->updateProduct($id,$name,$price);
}
$resp = array(code => $code, msg => $obj->getMsg());
header(Content-Type: application/json);
header(Access-Control-Allow-Origin: *);
header(Access-Control-Allow-Methods: GET, POST);
echo json encode($resp);
break;
Pour la derni`
ere op
eration, on d
etecte le id dans le JSON. Ensuite on fait appel `
a deleteProduc
depuis la classe Product.
case "delete":
$id = $json->{id};
$obj = new Product();
$code = $obj->deleteProduct($id);
$resp = array(code => $code, msg => $obj->getMsg());
header(Content-Type: application/json);
header(Access-Control-Allow-Origin: *);
header(Access-Control-Allow-Methods: GET, POST);
echo json encode($resp);
break;
Enregistrez lensemble de vos codes.
Building Front-End
4.1
Service et Controller
Nous commenc
ons par cr
eer module, service et contr
oleur en cr
eant un fichier productservice.js.
Voici un exemple dimpl
ementation du module et du service :
$http({
method: POST,
url: php/api.php,
data: JSON.stringify(postdata),
headers: {
Content-type: application/json
}
}).success(function(resp){
callback(resp);
}).error(function(){
callback(undefined);
});
};
});
Voici trois services qui vont g
erer les op
eration CRUD :
save .
read .
delete.
On impl
emente le contr
oleur comme suit :
myApp.controller(MyControlller, function($scope,DataService) {
$scope.products = [];
$scope.product = {};
$scope.result = {};
$scope.getAllData = function() {
DataService.read(function(data){
if(data.code==1) {
$scope.products = data.data;
}
});
};
$scope.edit = function(product) {
$scope.product = product;
};
$scope.delete = function(id) {
var r = confirm("Are you sure to delete this item?");
if(r==true) {
DataService.delete(id,function(data){
if(data.code==1) {
alert("Deleted data was success");
}else {
alert("Deleted data was failed");
}
});
}
};
$scope.save = function() {
DataService.save($scope.product,function(data){
if(data.code==1){
alert("Saved data was success");
}else{
alert("Saved data was failed");
}
$scope.result = data;
$scope.product = {};
});
};
});
4.2
HTML
<!DOCTYPE html>
<html ng-app="ProductService">
<head>
<title>Demo AngularJS+PHP+MySQL</title>
<link rel="stylesheet" href="css/simple.css">
<script src="lib/angular.min.js"></script>
<script src="services/productservices.js"></script>
</head>
<body ng-controller=MyControlller data-ng-init="getAllData()" >
<header>
<h1>Demo AngularJS+PHP+MySQL</h1>
</header>
<br>
<form name="form" ng-submit="submitForm(form.$valid)" novalidate >
<div>
<p>
<input type="hidden" ng-model="product.id">
<label class="control-label" for="name">Product Name:</label>
<input type="text" id="name" ng-model=product.name placeholder="Name" required>
</p>
<p>
<label class="control-label" for="price">Price:</label>
<input type="text" id="price" ng-model=product.price placeholder="Price" required>
</p>
<p>
<button ng-disabled="form.$invalid" ng-click="save()" >Save</button> Response from server:
{{ result }}
</p>
</div>
</form>
<br>
<p>
<button ng-click="getAllData()" >Reload</button>
</p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Price</th>
<th>Action</th>
</tr>
</thead>
<tbody ng-repeat="product in products">
<tr ng-class="{even: $even, odd: $odd}">
<td>{{ product.name }}</td>
<td>{{ product.price | number:2 }}</td>
Test de lapplication
Maintenant vous
etes pr
et `
a d
eployer votre application. Tapez lurl de votre application
et visionnez le r
esultat. Il faut joindre une impression
ecran de laffichage que vous
obtenez dans votre compte rendu.
Pour cr
eer un nouveau produit, vous devez suivre les
etapes suivantes :
Renseigner lensemble des champs du formulaire
cliquer sur Save pour enregistrer
pour recharger la nouvelle donn
ee cliquez sur Reload
Pour
editer les donn
ees :
cliquez sur edit correspondant `
a la donn
ee que vous voulez
editer
vous pouvez visualiser les donn
ees dans un formulaire
editer la donn
ee souhait
ee
si la donn
ee est
edit
ee, cliquez sur Save
pour recharger la nouvelle donn
ee cliquez sur Reload