AMPPS
AMPPS, che potete scaricare qui, è un ambiente di sviluppo LAMP che vi permette di avere in un’unica soluzione Apache, PHP e MySQL.
Dopo averlo scaricato, create una vostra directory di lavoro che assocerete al dominio locale che andrete a creare in AMPPS. Per comodità chiameremo questo dominio phpecommercemvc.test
.
MySQL
Il nostro database avrà tre tabelle:
products
: la tabella dei prodotti.orders
: la tabella degli ordini.customers
: la tabella dei clienti.
Di seguito riportiamo la struttura delle tabelle.
products
CREATE TABLE IF NOT EXISTS `products` (
`id` int(11) NOT NULL,
`title` varchar(255) NOT NULL,
`description` text NOT NULL,
`manufacturer` varchar(255) NOT NULL,
`price` decimal(10,2) NOT NULL,
`image` varchar(255) NOT NULL,
`slug` varchar(255) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
ALTER TABLE `products`
ADD PRIMARY KEY (`id`);
orders
CREATE TABLE IF NOT EXISTS `orders` (
`id` varchar(255) NOT NULL DEFAULT '',
`created` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`cart` text,
`customer` varchar(255) DEFAULT NULL,
`billing` varchar(255) DEFAULT NULL,
`shipping` varchar(255) DEFAULT NULL,
`total` decimal(10,2) DEFAULT NULL,
`total_taxes` decimal(10,2) DEFAULT NULL,
`status` tinyint(1) DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `orders`
ADD PRIMARY KEY (`id`),
ADD KEY `id` (`id`);
customers
CREATE TABLE IF NOT EXISTS `customers` (
`id` varchar(255) NOT NULL,
`firstname` varchar(255) DEFAULT NULL,
`lastname` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `customers`
ADD PRIMARY KEY (`id`);
In pratica la tabella dei clienti è collegata alla tabella degli ordini mediante i campi customers.id
e orders.customer
. Il campo orders.cart
conterrà la versione serializzata del carrello di ciascun ordine in modo che in futuro si potrà sempre avere accesso alle singole voci degli ordini.
Struttura dei file e delle directory
La struttura dei file e delle directory del nostro spazio di lavoro in questa fase sarà la seguente:
/core
/classes
/PHPEcommerce
/lib
/src
/locales
/templates
/email
autoload.php
config.php
/public
/assets
/css
/images
/js
/views
.htaccess
index.php
add-to-cart.php
cancel.php
cart.php
checkout.php
payment.php
product.php
thank-you.php
manufacturers.php
manufacturer.php
I file PHP multipli in questa fase saranno poi rimossi quando passeremo all'approccio MVC lasciando il solo index.php
.
Apache
In questa prima fase useremo regole di riscrittura multiple nel file .htaccess
per mappare gli URL con i rispettivi file PHP.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?product/(.*?)/?$ /product.php?id=$1 [L]
RewriteRule ^/?add-to-cart/?$ /add-to-cart.php
RewriteRule ^/?cart/?$ /cart.php
RewriteRule ^/?checkout/?$ /checkout.php
RewriteRule ^/?payment/?$ /payment.php
RewriteRule ^/?thank-you/?$ /thank-you.php
RewriteRule ^/?cancel/?$ /cancel.php
RewriteRule ^/?manufacturer/(.*?)/?$ /manufacturer.php?id=$1 [L]
RewriteRule ^/?manufacturers/?$ /manufacturers.php
Da notare il modificatore ?
nelle espressioni regolari usato vicino agli slash dell’URL: così facendo consentiamo la selezione sia degli URL che hanno uno slash sia di quelli che ne sono privi.
PayPal
Collegatevi alla Sandbox di PayPal e create due account, uno di tipo Business che userete per accettare i pagamenti fittizi ed uno normale che userete per effettuare tali pagamenti.
Conclusione
Il setup del nostro ambiente di lavoro è completo. Nel nostro prossimo capitolo inizieremo a ragionare in termini di classi e della loro interazione.