Create php MVC app. Angular js - edit and delete product from app
In last lesson we began using angular js in our app. Today we continue to write angular code – we will make edit and delete functions in our app.
For the server connection we use $http build-in angular service. In homework I suggest you to write add product function by yourself.
Code lesson (product.tpl.php)
<form class="form-horizontal" name="productInfo" data-ng-submit="saveProduct()">
<input type="hidden" id="productId" data-ng-model="productId">
<legend>Редактирование товара</legend>
<div class="form-group">
<label for="productName" class="col-sm-3">Наименование товара</label>
<div class="col-sm-9">
<input type="text" data-ng-model="productName" id="productName" class="form-control">
</div>
</div>
<div class="form-group">
<label for="productPrice" class="col-sm-3">Стоимость товара</label>
<div class="col-sm-9">
<input type="text" data-ng-model="productPrice" id="productPrice" class="form-control">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-3 col-sm-9">
<button class="btn btn-default">Сохранить</button>
<button class="btn btn-danger" type="button" data-ng-click="deleteProduct(productId)">Удалить</button>
</div>
</div>
</form>
Code lesson (app.js)
var app = angular.module('products', ["ngRoute"]);
app.config(function($routeProvider, $locationProvider){
$routeProvider
.when("/:id", {
templateUrl : "/views/product.tpl.php"
});
$locationProvider.html5Mode(true);
})
app.controller('productsController', function($scope, $http, $window) {
$scope.getInfoByProductId = function(id) {
$http({
method: "GET",
url: "http://cabinet.codetogether.ru/cabinet/products/getProduct",
params: {id: id}
}).then(function(result){
$scope.productId = result.data.id;
$scope.productName = result.data.name;
$scope.productPrice = result.data.price;
})
}
$scope.saveProduct = function() {
// TODO: Домашнее задание - добавить валидацию данных, реализовать удаление товара
$scope.productName = angular.element("#productName").val();
$scope.productPrice = angular.element("#productPrice").val();
$http({
method: "POST",
url: "http://cabinet.codetogether.ru/cabinet/products/saveProduct",
data: $.param({id: $scope.productId, name: $scope.productName, price: $scope.productPrice}),
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).then(function(result){
if(result.data.success) {
$window.location.href = '/cabinet/products/';
}
})
}
$scope.addProduct = function() {
// TODO: добавить валидацию данных
$http({
method: "POST",
url: "http://cabinet.codetogether.ru/cabinet/products/addProduct",
data: $.param({productName: $scope.newProductName, productPrice: $scope.newProductPrice}),
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).then(function(result){
// TODO: написать и вызвать метод получения всех продуктов
if(result.data.success) {
$window.location.reload();
}
})
}
$scope.deleteProduct = function(id) {
$http({
method: "POST",
url: "http://cabinet.codetogether.ru/cabinet/products/deleteProduct",
data: $.param({id: id}),
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).then(function(result){
$window.location.href = '/cabinet/products/';
});
}
});
Code lesson (ProductsController.php)
<?php
class ProductsController extends Controller {
private $pageTpl = "/views/products.tpl.php";
public function __construct() {
$this->model = new ProductsModel();
$this->view = new View();
}
public function index() {
if(!$_SESSION['user']) {
header("Location: /");
}
$this->pageData['products'] = $this->model->getAllProducts();
$this->pageData['title'] = "Товары";
$this->view->render($this->pageTpl, $this->pageData);
if($_FILES) {
if($_FILES['csv']['type'] != 'text/csv' || $_FILES['csv']['type'] == '') {
$this->pageData['errors'] = "Ошибка! Возможно данный файл имеет некорректный формат";
} else {
if(move_uploaded_file($_FILES['csv']['tmp_name'],UPLOAD_FOLDER.$_FILES['csv']['name'])) {
$file = fopen(UPLOAD_FOLDER.$_FILES['csv']['name'], "r");
$row = 1;
while($data = fgetcsv($file, 200, ";")) {
if($row == 1) {
$row++;
continue;
} else {
$this->model->addFromCSV($data);
}
}
fclose($file);
$this->model->getAllProducts();
}
}
}
}
public function getProduct() {
if(!$_SESSION['user']) {
header("Location: /");
return;
}
if(!isset($_GET['id'])) {
echo json_encode(array("success" => false));
} else {
$productId = $_GET['id'];
$productInfo = json_encode($this->model->getProductById($productId));
echo $productInfo;
}
}
public function saveProduct() {
if(!$_SESSION['user']) {
header("Location: /");
return;
}
if(!isset($_POST['id']) || trim($_POST['name']) == '' || trim($_POST['price']) == '') {
echo json_encode(array("success" => false));
} else {
$productId = $_POST['id'];
$productName = trim($_POST['name']);
$productPrice = trim($_POST['price']);
if($this->model->saveProductInfo($productId, $productName, $productPrice)) {
echo json_encode(array("success" => true));
} else {
echo json_encode(array("success" => false));
}
}
}
public function addProduct() {
if(!$_SESSION['user']) {
header("Location: /");
return;
}
if(empty($_POST) || trim($_POST['productName']) == '' || trim($_POST['productPrice']) == '') {
echo json_encode(array("success" => false));
} else {
$productName = trim($_POST['productName']);
$productPrice = trim($_POST['productPrice']);
if($this->model->addProduct($productName, $productPrice)) {
echo json_encode(array("success" => true));
} else {
echo json_encode(array("success" => false));
}
}
}
public function deleteProduct() {
if(!$_SESSION['user']) {
header("Location: /");
return;
}
if(empty($_POST) || !isset($_POST['id'])) {
echo json_encode(array("success" => false));
} else {
$productId = $_POST['id'];
if($this->model->deleteProduct($productId)) {
echo json_encode(array("success" => true));
} else {
echo json_encode(array("success" => false));
}
}
}
}
?>
Code lesson (ProductsModel.php)
<?php
class ProductsModel extends Model {
public function getAllProducts() {
$result = array();
$sql = "SELECT * FROM products";
$stmt = $this->db->prepare($sql);
$stmt->execute();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$result[$row['id']] = $row;
}
return $result;
}
public function addFromCSV($data) {
$sql = "INSERT INTO products(name, price) VALUES(:name, :price)";
$stmt = $this->db->prepare($sql);
$stmt->bindValue(":name", $data[0], PDO::PARAM_STR);
$stmt->bindValue(":price", $data[1], PDO::PARAM_INT);
$stmt->execute();
}
public function getProductById($id) {
$result = array();
$sql = "SELECT * FROM products WHERE id = :id";
$stmt = $this->db->prepare($sql);
$stmt->bindValue(":id", $id, PDO::PARAM_INT);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
return $result;
}
public function saveProductInfo($id, $name, $price) {
$sql = "UPDATE products
SET price = :price, name = :name
WHERE id = :id
";
$stmt = $this->db->prepare($sql);
$stmt->bindValue(":price", $price, PDO::PARAM_INT);
$stmt->bindValue(":name", $name, PDO::PARAM_STR);
$stmt->bindValue(":id", $id, PDO::PARAM_INT);
$stmt->execute();
return true;
}
public function addProduct($productName, $productPrice) {
$sql = "INSERT INTO products(name, price)
VALUES(:productName, :productPrice)
";
$stmt = $this->db->prepare($sql);
$stmt->bindValue(":productName", $productName, PDO::PARAM_STR);
$stmt->bindValue(":productPrice", $productPrice, PDO::PARAM_INT);
$stmt->execute();
return true;
}
public function deleteProduct($id) {
$sql = "DELETE FROM products WHERE id = :id";
$stmt = $this->db->prepare($sql);
$stmt->bindValue(":id", $id, PDO::PARAM_INT);
$stmt->execute();
$count = $stmt->rowCount();
if($count > 0) {
return true;
} else {
return false;
}
}
}
?>
0 Comments