Rövid történelmi áttekintés az idén májusban verziószámot lépett Laravel PHP keretrendszerről, felépítéséről és előnyeiről is. Ezen kívül szóba kerültek még a 2013. november végén érkező 4.1-es frissítés újdonságai is.
2. Ki vagyok én?
• Webfejlesztő (back-end, PHP)
• 11 éve foglalkozom weboldalakkal
• Korábban CodeIgniter fan
• 2013. február óta a netpeople.hu
csapatát erősítem
6. Taylor Otwell
• 27 éves fejlesztő, Arkansasból
• A PHP előtt .NET-tel foglalkozott
• Jelenleg a UserScapenél dolgozik
http://userscape.com
• Tipikus one-man-army, lelkes
segítőkkel a háta mögött:
Dayle Rees, Shawn McCool, Je!rey Way,
Jason Lewis, Ben Corlett, Franz Liedke,
Dries Vints, Mior Muhammad Zaki és Phil
Sturgeon
• Twitter: @taylorotwell
7. Előzmények
• 2010-2011 között járunk.
• A CodeIgniter 2 képtelen volt felzárkózni, az EllisLab
mostohagyermeke lett.
• A többi framework lassan adaptálta a PHP 5.3 újdonságait,
nem tudtak elszakadni (PHP 4-ig kompatibillisek).
• Taylor célkitűzései: olyan keretrendszer, amit a fejlesztő
szívesen használ, élvezet vele fejleszteni, tiszta és
olvasható kód, alapos dokumentáció, gyorsan
megtanulható.
8. Két év, négy verziószám
Laravel# # # 2011. június
Laravel 2# # 2011. november
Laravel 3# # 2012. febuár
Laravel 4# # 2013. május
14. Egy Laravel projekt
• app
• commands
• config
• controllers
• database
• lang
• models
• start
• storage
• test
!
• views
• filters.php
• routes.php
• bootstrap
• public
• vendor
15. Expresszív kód
$articles = Article::where('status', '=', 1)
->orderBy('date', 'desc')
->skip(10)
->take(5)
->get();
!
Redirect::to('login')
->with('message', 'Sikertelen bejelentkezés!’);
!
Cookie::forever('remember_me', true);
Anélkül, hogy tudnánk pontosan mit csinál, pontosan tudjuk mit csinál.
16. Statikus interfész az alkalmazás IoC (Inversion of Control)
konténerében elhelyezkedő osztályaihoz.
$filesystem = new Filesystem(...)
$fileloader = new Fileloader($filesystem);
$config = new Config($fileloader, 'dev');
$appName = $config->get('application.name');
helyett
$appName = Config::get('application.name');
Nem statikus - Facade!
18. A route és RESTful
Route::controller('hirek', 'NewsController');
class NewsController
{
public function getIndex() {...}
public function getArticle() {...}
public function postComment() {...}
}
!
!
Route::resource('hirek', 'NewsController');
class NewsController
{
public function index() {...} // GET /hirek -> NewsController::index()
public function create() {...} // GET /hirek/uj -> NewsController::create()
public function store() {...} // POST /hirek -> NewsController::store()
public function show() {...} // GET /hirek/{id} -> NewsController::show($id)
public function edit() {...} // GET /hirek/{id}/szerk -> NewsController::edit($id)
public function update() {...} // PUT/PATCH /hirek/{id} -> NewsController::update($id)
public function destroy() {...} // DELETE /hirek/{id} -> NewsController::destroy($id)
}
1.
2.
19. Route nevek és $lterek
1.
2.
Route::get('hirek/{id}'), array('as' => 'article', function(){
return 'Ez egy hír!';
});
URL::route('article', array('id' => 1));
Redirect::route('article', array('id' => 1));
!
!
Route::filter('auth', function(){
if (Auth::guest()) {
return Redirect::to('bejelentkezes');
}
});
Route::get('admin', array('before' => 'auth', function(){
return 'Be vagy jelentkezve, üdvözlünk az adminfelületen!';
});
23. Eloquent: kapcsolatban
• Egy-az-egyhez
• Egy-a-többhöz
• Több-a-többhöz
• Polimor#kus
kapcsolatok
class User extends Eloquent {
!
public function phone()
{
return $this->hasOne('Phone');
}
!
}
!
User::find(1)->phone;
!
!
MySQL:
!
select * from users where id = 1
select * from phones where user_id = 1
35. Mérföldkövek
4.0% % % 2013. május
4.1% % % 2013. november
4.2% % % 2014. május
4.3% % % 2014. november
36. • Polimor$kus Több-Több kapcsolat (Polymorphic Many To Many),
több modellhez.
• Remote: integrált Rocketeer package (http://anahkiasen.github.io/
rocketeer/) olyan, mint a Capistrano a Ruby-ban, code
deploymenthez.
• Eloquent:
• whereHas: pl. egy blognál az összes olyan poszt lekérése, ahol
egy adott user már kommentelt
Post::whereHas('comment', function($q) {
% % $q->where('user_id', 1); }, '>', 0)->get();
});
• hasMany
A Laravel 4.1 újdonságai
37. • Új Artisan parancsok:
• artisan tail - error log valós időben.
• artisan tinker - valós idejű, interaktív kódtesztelés
• artisan changes - changelog
• Cache: a Cache::section() kibővül egy tag funkcióval, címkézni
lehet majd a cache szekciókat.
• Queue: Redis támogatás, priorítás kezelés.
• Sebességoptimalizálás
• A frissítés mindössze ennyi:
composer update
A Laravel 4.1 újdonságai
38. Hasznos könyvek a kezdéshez
Dayle Rees:
Code Bright
Chris Fidao:
Implementing
Laravel
Chuck Heinzelman:
Getting Stu&
Done With
Laravel 4
Christopher
Pitt:
Laravel 4
Cookbook
Je!rey Way:
Laravel Testing
Decoded
Taylor Otwell:
From Apprentice
to Artisan