SlideShare a Scribd company logo
1 of 40
Download to read offline
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ítja

a 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 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
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 út
CodeIgniter
Kohana
FuelPHP
Laravel 3 Laravel 4
Symfony 2
• symfony/console
• symfony/http-foundation
Symfony komponensek
Laravel 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 simple
1.
2.
3.
4.
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.
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
• 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
));
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();
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 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');
! }
!
}
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')
• 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
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('us@example.com', 'Laravel');
!->to('foo@example.com', '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: 

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
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: laravel@terdelyi.com
LinkedIn: http://hu.linkedin.com/in/terdelyi
!
Ez a prezentáció innen letölthető: http://www.slideshare.net/terdelyi

More Related Content

Viewers also liked

Tendencias de la Tecnología de Información.
Tendencias de la Tecnología de Información.Tendencias de la Tecnología de Información.
Tendencias de la Tecnología de Información.
Roberto Ramírez Amaya
 
Add 2009 10
Add 2009 10Add 2009 10
Add 2009 10
RUAULT
 

Viewers also liked (6)

Moving away from legacy code (AgileCymru)
Moving away from legacy code  (AgileCymru)Moving away from legacy code  (AgileCymru)
Moving away from legacy code (AgileCymru)
 
Moving away from legacy code with BDD
Moving away from legacy code with BDDMoving away from legacy code with BDD
Moving away from legacy code with BDD
 
Tendencias de la Tecnología de Información.
Tendencias de la Tecnología de Información.Tendencias de la Tecnología de Información.
Tendencias de la Tecnología de Información.
 
Add 2009 10
Add 2009 10Add 2009 10
Add 2009 10
 
Refactoring legacy code driven by tests - ITA
Refactoring legacy code driven by tests -  ITARefactoring legacy code driven by tests -  ITA
Refactoring legacy code driven by tests - ITA
 
Laravel Beginners Tutorial 1
Laravel Beginners Tutorial 1Laravel Beginners Tutorial 1
Laravel Beginners Tutorial 1
 

Similar to Laravel for Dummies

Drupal+javascript
Drupal+javascriptDrupal+javascript
Drupal+javascript
Péter Nagy
 
A PHP 5.4 újdonságai
A PHP 5.4 újdonságaiA PHP 5.4 újdonságai
A PHP 5.4 újdonságai
Ferenc Kovács
 
Miért vagyok Python rajongó? - avagy kalandozások egy nyílt forrású programoz...
Miért vagyok Python rajongó? - avagy kalandozások egy nyílt forrású programoz...Miért vagyok Python rajongó? - avagy kalandozások egy nyílt forrású programoz...
Miért vagyok Python rajongó? - avagy kalandozások egy nyílt forrású programoz...
Ferenc Szalai
 

Similar to Laravel for Dummies (20)

Drupal security
Drupal securityDrupal security
Drupal security
 
Mi a baj a Drupaloddal
Mi a baj a DrupaloddalMi a baj a Drupaloddal
Mi a baj a Drupaloddal
 
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?Webműves Kelemen tanácsai, avagy mi kell a PHP falába?
Webműves Kelemen tanácsai, avagy mi kell a PHP falába?
 
Drupal+javascript
Drupal+javascriptDrupal+javascript
Drupal+javascript
 
Két Java fejlesztő első Scala projektje
Két Java fejlesztő első Scala projektjeKét Java fejlesztő első Scala projektje
Két Java fejlesztő első Scala projektje
 
Chef
ChefChef
Chef
 
A PHP 5.4 újdonságai
A PHP 5.4 újdonságaiA PHP 5.4 újdonságai
A PHP 5.4 újdonságai
 
jQuery 1.4 újdonságok
jQuery 1.4 újdonságokjQuery 1.4 újdonságok
jQuery 1.4 újdonságok
 
LESS, mint css preprocessor
LESS, mint css preprocessorLESS, mint css preprocessor
LESS, mint css preprocessor
 
Szerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelvenSzerver oldali fejlesztés korszerű módszerekkel C# nyelven
Szerver oldali fejlesztés korszerű módszerekkel C# nyelven
 
Hogy kerül a csizma az asztalra?
Hogy kerül a csizma az asztalra?Hogy kerül a csizma az asztalra?
Hogy kerül a csizma az asztalra?
 
Miért vagyok Python rajongó? - avagy kalandozások egy nyílt forrású programoz...
Miért vagyok Python rajongó? - avagy kalandozások egy nyílt forrású programoz...Miért vagyok Python rajongó? - avagy kalandozások egy nyílt forrású programoz...
Miért vagyok Python rajongó? - avagy kalandozások egy nyílt forrású programoz...
 
Szoftver tesztelés - Gyakorlati jó-ha-tudod
Szoftver tesztelés - Gyakorlati jó-ha-tudodSzoftver tesztelés - Gyakorlati jó-ha-tudod
Szoftver tesztelés - Gyakorlati jó-ha-tudod
 
Ci
CiCi
Ci
 
Couchdb - WebKonf 2009
Couchdb - WebKonf 2009Couchdb - WebKonf 2009
Couchdb - WebKonf 2009
 
Dcourse nodeapi
Dcourse nodeapiDcourse nodeapi
Dcourse nodeapi
 
Univerzalis Entitas Kezeles - Laravel
Univerzalis Entitas Kezeles - LaravelUniverzalis Entitas Kezeles - Laravel
Univerzalis Entitas Kezeles - Laravel
 
Objektum Orientalt Fejlesztes PHP5-ben
Objektum Orientalt Fejlesztes PHP5-benObjektum Orientalt Fejlesztes PHP5-ben
Objektum Orientalt Fejlesztes PHP5-ben
 
Drupal 6 Database layer
Drupal 6 Database layerDrupal 6 Database layer
Drupal 6 Database layer
 
Jee kurzus 8. het
Jee kurzus 8. hetJee kurzus 8. het
Jee kurzus 8. het
 

Laravel for Dummies

  • 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. 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. 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
  • 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
  • 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. Egyéb komponensek • classpreloader/classpreloader • doctrine/dbal • ircmaxell/password-compat • #lp/whoops • monolog/monolog • nesbot/carbon • patchwork/utf8 • predis/predis • swiftmailer/swiftmailer Laravel 4
  • 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!
  • 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. 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!'; });
  • 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. 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. 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. 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. 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. • 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
  • 29. Authentikáció if (Auth::attempt(array('email' => $email, 'password' => $password))) { return Redirect::to('dashboard'); } ! if (Auth::check()) {...}
  • 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. Ű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. 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. 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
  • 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
  • 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. 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