Laravel for Dummies

2,345 views

Published on

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.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,345
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
32
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Laravel for Dummies

  1. 1. LaravelFOR DUMMIES
  2. 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
  3. 3. Keretrendszerek Mire jó? Leegyszerűsíti és felgyorsítja
 a fejlesztő munkáját. Melyik a legjobb? Erre nincs jó válasz, szubjektív döntés alapján.
  4. 4. 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
  5. 5. A Laravel története
  6. 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. 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. 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
  9. 9. A laraveli út CodeIgniter Kohana FuelPHP Laravel 3 Laravel 4 Symfony 2
  10. 10. • symfony/console • symfony/http-foundation Symfony komponensek Laravel 3
  11. 11. 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
  12. 12. Egyéb komponensek • classpreloader/classpreloader • doctrine/dbal • ircmaxell/password-compat • #lp/whoops • monolog/monolog • nesbot/carbon • patchwork/utf8 • predis/predis • swiftmailer/swiftmailer Laravel 4
  13. 13. A Laravel használatban
  14. 14. Egy Laravel projekt • app • commands • config • controllers • database • lang • models • start • storage • test ! • views • filters.php • routes.php
 • bootstrap • public • vendor
  15. 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. 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!
  17. 17. 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 simple 1. 2. 3. 4.
  18. 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. 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!'; });
  20. 20. Modellek
  21. 21. Query Builder • Sokoldalú, PDO (PHP Data Objects) alapú adatbázis absztrakciós model • Láncolható objektum metódusok vagy nyers SQL • Alternatívák • ZendDbSql • 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 ));
  22. 22. 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: • ZendDbTableGateway • 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();
  23. 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
  24. 24. 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 IlluminateDatabaseMigrationsMigration; ! 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'); ! } ! }
  25. 25. View és a Blade Route::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')
  26. 26. • 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 IlluminateConsoleCommand; use SymfonyComponentConsoleInputInputOption; use SymfonyComponentConsoleInputInputArgument; ! 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
  27. 27. Artisan parancsok
  28. 28. Egyéb érdekességek
  29. 29. Authentikáció if (Auth::attempt(array('email' => $email, 'password' => $password))) { return Redirect::to('dashboard'); } ! if (Auth::check()) {...}
  30. 30. Levélküldés Mail::send( ! array(‘html.view’, ‘text.view’), $data, ! function($message) ! { !$message->from('us@example.com', 'Laravel'); !->to('foo@example.com', 'John Smith') !->subject('Hello levél!'); ! } );
  31. 31. Ű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() }}
  32. 32. 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');
  33. 33. 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
  34. 34. A jövő
  35. 35. Mérföldkövek 4.0% % % 2013. május 4.1% % % 2013. november 4.2% % % 2014. május 4.3% % % 2014. november
  36. 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. 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. 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
  39. 39. 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
  40. 40. Kérdés? Twitter: @terdelyi Email: laravel@terdelyi.com LinkedIn: http://hu.linkedin.com/in/terdelyi ! Ez a prezentáció innen letölthető: http://www.slideshare.net/terdelyi

×