laravel for dummies

40
Laravel FOR DUMMIES

Upload: tamas-erdelyi

Post on 05-Jul-2015

1.693 views

Category:

Technology


42 download

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.

TRANSCRIPT

Page 1: Laravel for Dummies

LaravelFOR DUMMIES

Page 2: Laravel for 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

Page 3: Laravel for Dummies

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.

Page 4: Laravel for Dummies

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

Page 5: Laravel for Dummies

A Laravel története

Page 6: Laravel for Dummies

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

Page 7: Laravel for Dummies

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ó.

Page 8: Laravel for Dummies

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

Page 9: Laravel for Dummies

A laraveli útCodeIgniter

Kohana

FuelPHP

Laravel 3 Laravel 4

Symfony 2

Page 10: Laravel for Dummies

• symfony/console

• symfony/http-foundation

Symfony komponensekLaravel 3

Page 11: Laravel for Dummies

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

Page 12: Laravel for Dummies

Egyéb komponensek

• classpreloader/classpreloader

• doctrine/dbal

• ircmaxell/password-compat

• #lp/whoops

• monolog/monolog

• nesbot/carbon

• patchwork/utf8

• predis/predis

• swiftmailer/swiftmailer

Laravel 4

Page 13: Laravel for Dummies

A Laravel használatban

Page 14: Laravel for Dummies

Egy Laravel projekt• app

• commands • config • controllers • database • lang • models • start • storage • test

!• views • filters.php • routes.php

• bootstrap • public • vendor

Page 15: Laravel for Dummies

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.

Page 16: Laravel for Dummies

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!

Page 17: Laravel for Dummies

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.

Page 18: Laravel for Dummies

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.

Page 19: Laravel for Dummies

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!';

});

Page 20: Laravel for Dummies

Modellek

Page 21: Laravel for Dummies

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 ));

Page 22: Laravel for Dummies

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();

Page 23: Laravel for Dummies

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

Page 24: Laravel for Dummies

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'); ! } !}

Page 25: Laravel for Dummies

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')

Page 26: Laravel for Dummies

• 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

Page 27: Laravel for Dummies

Artisan parancsok

Page 28: Laravel for Dummies

Egyéb érdekességek

Page 29: Laravel for Dummies

Authentikáció

if (Auth::attempt(array('email' => $email, 'password' => $password))) {

return Redirect::to('dashboard');

}

!if (Auth::check()) {...}

Page 30: Laravel for Dummies

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!');

! }

);

Page 31: Laravel for Dummies

Ű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() }}

Page 32: Laravel for Dummies

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');

Page 33: Laravel for Dummies

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

Page 34: Laravel for Dummies

A jövő

Page 35: Laravel for Dummies

Mérföldkövek

4.0% % % 2013. május

4.1% % % 2013. november

4.2% % % 2014. május

4.3% % % 2014. november

Page 36: Laravel for Dummies

• 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

Page 37: Laravel for Dummies

• Ú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

Page 38: Laravel for Dummies

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

Page 39: Laravel for Dummies

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

Page 40: Laravel for Dummies

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