Upload
tamas-erdelyi
View
1.693
Download
42
Embed Size (px)
DESCRIPTION
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.
Citation preview
LaravelFOR DUMMIES
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
Keretrendszerek
Mire jó?
Leegyszerűsíti és felgyorsítjaa fejlesztő munkáját.
Melyik a legjobb?
Erre nincs jó válasz, szubjektív döntés alapján.
A PHP reneszánszát éli• Bővebb lehetőségek PHP 5.3-tól felfele
(pl. namespaces, closures, traits)
• Jobb eszközök • Composer
• CLI - Command Line Interface
• Előremutató szabványok (PSR)
• Hatékonyabb szemlélet • OOP - Object-Oriented Programming
• TDD - Test Driven Development
• DI - Dependency Injection
A Laravel története
Taylor Otwell• 27 éves fejlesztő, Arkansasból
• A PHP előtt .NET-tel foglalkozott
• Jelenleg a UserScapenél dolgozikhttp://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
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ó.
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
A laraveli útCodeIgniter
Kohana
FuelPHP
Laravel 3 Laravel 4
Symfony 2
• symfony/console
• symfony/http-foundation
Symfony komponensekLaravel 3
Symfony komponensek
• symfony/browser-kit
• symfony/console
• symfony/css-selector
• symfony/debug
• symfony/dom-crawler
• symfony/event-dispatcher
• symfony/#nder
• symfony/http-foundation
• symfony/http-kernel
• symfony/process
• symfony/routing
• smyfony/translation
Laravel 4
Egyéb komponensek
• classpreloader/classpreloader
• doctrine/dbal
• ircmaxell/password-compat
• #lp/whoops
• monolog/monolog
• nesbot/carbon
• patchwork/utf8
• predis/predis
• swiftmailer/swiftmailer
Laravel 4
A Laravel használatban
Egy Laravel projekt• app
• commands • config • controllers • database • lang • models • start • storage • test
!• views • filters.php • routes.php
• bootstrap • public • vendor
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.
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!
Route::get('hello-vilag', function() {
return 'Helló világ!';
});
!Route::get('hello/{name}', function($name) {
return 'Helló' . $name;
})->where('name', '[a-zA-Z]+');
!Route::post('form', function() {
return 'Posttal küldött adatok:' . print_r($_POST, true);
});
!Route::get('hirek', 'NewsController@showNews');
Route as simple1.
2.
3.
4.
A route és RESTfulRoute::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.
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!';
});
Modellek
Query Builder• Sokoldalú, PDO (PHP
Data Objects) alapú adatbázis absztrakciós model
• Láncolható objektum metódusok vagy nyers SQL
• Alternatívák • Zend\Db\Sql
• MDB2 package
$posts = DB::table('posts') ->where('status', '=', 1) ->orderBy('date', 'desc') ->take(5) ->get(); foreach ($posts as $row) { echo $row->title; } !$post = DB::table('posts') ->where('id', '=', 23) ->first(); echo $post->title; !DB::table('posts')->insert(array( 'title' => 'PHP Meetup', 'date' => '2013-11-28', 'status'=> 1 ));
Eloquent ORM• A Query Builder szintaxisára
épül, egy adatbázis tábla sorait objektummá alakítja.
• Erőteljes funkciók: relationships, eager loading, event triggers, accessors / mutators.
• Alternatívák: • Zend\Db\TableGateway
• Doctrine
• Propel
• Redbean
class Posts extends Eloquent { protected $table = 'tabla_neve'; public function summary() { return truncate($this->content); } } !// lekeres $posts = Posts::get(); !// letrehozas $post = new Posts(); $post->title = 'Poszt címe'; $post->date = '2013-06-28'; $post->status = 1; $post->save();
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
Scheme Builder és migrációk• Migrations:
verziókezelés adatbázisokhoz.
• Scheme Builder: új táblák létrehozása, meglévők módosítása, feltöltés adatokkal (seeding).
• Migrációk futtatása parancssorból:
php artisan migrate php artisan rollback
// app/database/migrations ! ! /2013_11_28_1901537_posts.php use Illuminate\Database\Migrations\Migration; !class Posts extends Migration { !! public function up() ! { ! ! Schema::create('posts', function($table) ! ! { ! ! $table->increments('id'); ! ! $table->string('string', 150); ! ! $table->text('content'); ! ! $table->date('date'); ! ! }); ! } !! public function down() ! { ! ! Schema::drop('posts'); ! } !}
View és a BladeRoute::get('hirek', function(){ $posts = Posts::all(); return View::make('posts') ->with('pageTitle', 'Bejegyzések') ->with('posts', $posts); });
// app/views/posts.blade.php @include('sections/header') <h1>{{ $pageTitle }}</h1> !@foreach($posts as $post) <h2>{{ $post->title }}</h2> @if ($post->summary()) <p>{{ $post->summary() }}</p> @endif @endforeach !@include('sections/footer')
• A Symfony Console komponensén alapul.
• Az alkalmazásunk karbantartására, menedzselésére írhatunk benne parancssori feladatokat, taskokat, pl. kódgenerálás, adatbázis migrációk, online / o$ine, stb.
• Könnyedén írható új parancs vagy módosítható egy meglévő.
// app/commands/HelloCommand.php use Illuminate\Console\Command; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputArgument; !class HelloCommand extends Command { !! protected $name = 'command:hello'; ! protected $description = 'Command description.'; !! public function fire() ! { ! ! echo "Helló világ!\n"; ! } !} !// app/start/artisan.php Artisan::add(new HelloCommand);
Artisan
Artisan parancsok
Egyéb érdekességek
Authentikáció
if (Auth::attempt(array('email' => $email, 'password' => $password))) {
return Redirect::to('dashboard');
}
!if (Auth::check()) {...}
Levélküldés
Mail::send(
! array(‘html.view’, ‘text.view’), $data,
! function($message)
! {
!$message->from('[email protected]', 'Laravel');
!->to('[email protected]', 'John Smith')
!->subject('Hello levél!');
! }
);
Űrlapok
{{ Form::open(array('url' => 'login')) }}
<p>{{ Form::label('username', 'Felhasználónév'); }}<br>
{{ Form::text('username'); }}</p>
<p>{{ Form::label('password', 'Jelszó'); }}<br>
{{ Form::password('password'); }}</p>
<p>{{ Form::label('remember', 'Emlékezz rám'); }}<br>
{{ Form::checkbox('remember', 1); }}</p>
{{ Form::close() }}
Sessions & Cookies
Session::put('key', 'value');
Session::get('key', 'default');
Session::get('key', function() {
return 'default';
});
Session::forget('key');
Session::flash('key', 'value');
!
Cookie::make('name', 'value', $minutes);
Cookie::get('name');
Cookie::forever('name', 'value');
Mi még?• Pagination • Enviroments • Validation • Localization • Cache • Queue • Events
• Unit Testing • IoC (DI) • Errors /
Exceptions • Logging • Brycpt hashing
• Package fejlesztés (Workbench)
• Helperek (array, string, url, stb.)
• Requests • Responses • Fájlműveletek
A jövő
Mérföldkövek
4.0% % % 2013. május
4.1% % % 2013. november
4.2% % % 2014. május
4.3% % % 2014. november
• 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
• Ú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
Hasznos könyvek a kezdéshez
Dayle Rees: Code Bright
Chris Fidao: ImplementingLaravel
Chuck Heinzelman:Getting Stu&Done WithLaravel 4
ChristopherPitt:Laravel 4Cookbook
Je!rey Way:Laravel Testing Decoded
Taylor Otwell:From Apprenticeto Artisan
Hasznos linkek a folyatáshoz
• Dokumentáció:http://laravel.com/docs
• Fórum: http://forums.laravel.io/
• IRC:http://laravel.io/irc
irc.freenode.net:6667#laravel
• Laravel Cheat Sheet:http://cheats.jesse-obrien.ca/
• Laravel hírlevél:http://laravelweekly.com/
• Laracast by Je!rey Way:https://laracasts.com/
9$ / hónap
Kérdés?Twitter: @terdelyi
Email: [email protected]
LinkedIn: http://hu.linkedin.com/in/terdelyi
!Ez a prezentáció innen letölthető: http://www.slideshare.net/terdelyi