Snabbstarta ditt projekt med Flight, php-activerecord och Twig
Jag nämde i mitt tidigare inlägg om att PHP fortfarande är störst "microramverket" Flight som jag har använt mig av en hel del på sistone.
Likt Flask, Sinatra och för all del Slim – är Flight ett enkelt ramverk som är gjort för att byggas vidare på helt efter tycke och smak.
Flight är väldigt "barebone" i standardutförande, du får inte så mycket mer en enkla metoder att route:a trafik och ett mycket grundläggande template-språk. Men med php-activerecord och Twig så blir Flight en perfekt start för både små och mellanstora webbapplikationer.
Börja med att sätta upp en struktur liknande det här:
Nu ska vi använda composer för dra in Flight, php-activerecord och Twig till vårt projekt. Alla finns på Packagist, så skapa en composer.json-fil som ser ut ungefär så här:
1{2 "require": {3 "twig/twig": "1.*",4 "mikecao/flight": "dev-master",5 "php-activerecord/php-activerecord": "dev-master"6 }7}
1{2 "require": {3 "twig/twig": "1.*",4 "mikecao/flight": "dev-master",5 "php-activerecord/php-activerecord": "dev-master"6 }7}
Dra sedan ner composer till ditt projekt:
1$ curl -s http://getcomposer.org/installer | php
1$ curl -s http://getcomposer.org/installer | php
Och installera modulerna (notera att du måste ha Git installerat):
1$ php composer.phar install
1$ php composer.phar install
Släng också in en .htaccess-fil (om du använder Apache):
1RewriteEngine On2RewriteCond %{REQUEST_FILENAME} !-f3RewriteCond %{REQUEST_FILENAME} !-d4RewriteRule ^(.*)$ index.php [QSA,L]
1RewriteEngine On2RewriteCond %{REQUEST_FILENAME} !-f3RewriteCond %{REQUEST_FILENAME} !-d4RewriteRule ^(.*)$ index.php [QSA,L]
Nu borde du ha allt installerat i /vendor
, och vara redo för att skriva lite PHP!
Skapa en index.php
i projektmappen och inkludera composer:ns autoload.php
. Testa sedan att med Flight skapa et route till /test:
1<?php2 include dirname(__FILE__) . '/vendor/autoload.php';34 Flight::route('/test', function(){5 echo "hello world!";6 });78 Flight::start();
1<?php2 include dirname(__FILE__) . '/vendor/autoload.php';34 Flight::route('/test', function(){5 echo "hello world!";6 });78 Flight::start();
På localhost/test
(eller hur du nu har din miljö uppsatt) bör du kort och gott se "hello world!
".
Nu kommer det roliga, att få alla delarna att leka snällt med varandra. Börja med att konfigurera upp Twig:
1<?php2 /**3 * Initiate Twig, and register to Flight4 */5 $loader = new Twig_Loader_Filesystem(dirname(__FILE__) . '/views');6 $twigConfig = array(7 // 'cache' => './cache/twig/',8 // 'cache' => false,9 'debug' => true,10 );11 Flight::register('view', 'Twig_Environment', array($loader, $twigConfig), function($twig) {12 $twig->addExtension(new Twig_Extension_Debug()); // Add the debug extension13 });
1<?php2 /**3 * Initiate Twig, and register to Flight4 */5 $loader = new Twig_Loader_Filesystem(dirname(__FILE__) . '/views');6 $twigConfig = array(7 // 'cache' => './cache/twig/',8 // 'cache' => false,9 'debug' => true,10 );11 Flight::register('view', 'Twig_Environment', array($loader, $twigConfig), function($twig) {12 $twig->addExtension(new Twig_Extension_Debug()); // Add the debug extension13 });
På detta vis når vi nu Twig via
1<?php2 Flight::view()->display('template.html', $data);
1<?php2 Flight::view()->display('template.html', $data);
Testa så att allt fungerar genom att skapa en mall och lägg den i din views-mapp.
1<?php2 // template.html3 hello {{name}}!45 // index.php6 Flight::route('/hello', function(){7 $data = array(8 'name' => Flight::request()->query->name9 );10 Flight::view()->display('template.html', $data);11 });
1<?php2 // template.html3 hello {{name}}!45 // index.php6 Flight::route('/hello', function(){7 $data = array(8 'name' => Flight::request()->query->name9 );10 Flight::view()->display('template.html', $data);11 });
localhost/hello?name=Marcus
borde ge "hello Marcus!
".
Nu var det php-activerecord också. Om du har använt CodeIgniter eller Lithium så är chanserna stora att du har använt något derivat av php-activerecord, så du borde känna igen syntaxen – det är anledningen till att jag brukar köra på det. Men om du föredrar något annat ORM, kör för all del på det istället. För att ladda in det i Flight gör vi på följande vis:
1<?php2 /**3 * Initiate ActiveRecord4 */5 ActiveRecord\Config::initialize(function($cfg) {6 $cfg->set_model_directory('./models');7 $cfg->set_connections(8 // mysql://9 array('development' => 'mysql://username:password@localhost/database')10 );11 $cfg->set_default_connection('development');12 });
1<?php2 /**3 * Initiate ActiveRecord4 */5 ActiveRecord\Config::initialize(function($cfg) {6 $cfg->set_model_directory('./models');7 $cfg->set_connections(8 // mysql://9 array('development' => 'mysql://username:password@localhost/database')10 );11 $cfg->set_default_connection('development');12 });
För det här testet kan vi använda en väldigt enkel users-tabell:
1CREATE TABLE `users` (2 `id` int(11) NOT NULL AUTO_INCREMENT,3 `firstname` varchar(255) COLLATE utf8_swedish_ci NOT NULL,4 `surname` varchar(255) COLLATE utf8_swedish_ci NOT NULL,5 `email` varchar(255) COLLATE utf8_swedish_ci NOT NULL,6 PRIMARY KEY (`id`)7) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci AUTO_INCREMENT=1 ;
1CREATE TABLE `users` (2 `id` int(11) NOT NULL AUTO_INCREMENT,3 `firstname` varchar(255) COLLATE utf8_swedish_ci NOT NULL,4 `surname` varchar(255) COLLATE utf8_swedish_ci NOT NULL,5 `email` varchar(255) COLLATE utf8_swedish_ci NOT NULL,6 PRIMARY KEY (`id`)7) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci AUTO_INCREMENT=1 ;
Sätt också upp en user-modell i /models
:
1<?php2 class User extends ActiveRecord\Model {3 }
1<?php2 class User extends ActiveRecord\Model {3 }
Nu borde du enkelt kunna skapa en ny användare genom:
1<?php2 $user = new User();3 $user->firstname = 'Marcus';4 $user->surname = 'Olsson';5 $user->email = 'trash@thedumpster.com';6 $user->save();78 print_r(User::last());910 // User Object11 // (12 // [...]13 // [attributes:ActiveRecord\Model:private] => Array14 // (15 // [id] => 116 // [firstname] => Marcus17 // [surname] => Olsson18 // [email] => trash@dumpster.com19 // )20 // [...]21 // )
1<?php2 $user = new User();3 $user->firstname = 'Marcus';4 $user->surname = 'Olsson';5 $user->email = 'trash@thedumpster.com';6 $user->save();78 print_r(User::last());910 // User Object11 // (12 // [...]13 // [attributes:ActiveRecord\Model:private] => Array14 // (15 // [id] => 116 // [firstname] => Marcus17 // [surname] => Olsson18 // [email] => trash@dumpster.com19 // )20 // [...]21 // )
Det var allt egentligen – du har nu grunden för att snabbt kunna skapa en riktigt bra webbapplikation. Om du undrar varför vi satte upp /controllers
i början är det för att man inte ska behöva ha allt i sin index.php
– utan man kan mappa en route till en controller och metod, likt:
1<?php2 // index.php3 Flight::path(dirname(__FILE__) . '/controllers');4 Flight::route('/', array('IndexController', 'index'));56 // controllers/indexController.php7 class IndexController {8 public function __construct() {}910 public static function index() {11 echo 'Hello world!';12 }13 }
1<?php2 // index.php3 Flight::path(dirname(__FILE__) . '/controllers');4 Flight::route('/', array('IndexController', 'index'));56 // controllers/indexController.php7 class IndexController {8 public function __construct() {}910 public static function index() {11 echo 'Hello world!';12 }13 }
Hela den här guiden finns på GitHub för den som är intresserad, och jag är mer än intresserad av att höra vad du tycker om Flight, och andra microramverk för den delen.