Алексей Плеханов: 25 причин попробовать laravel
DESCRIPTION
Мой доклад посвящен популярному фреймворку Laravel. Я рассказываю про 25 причин, по которым, я считаю, стоит попробовать этот фреймворк, особенно, если раньше Вы не были с ним знакомы. Описаны ORM Eloquent, роутинг в Laravel, работа с основными компонентами, такими как контроллеры, шаблонизатор, авторизация, пагинация, а также более сложные вещи, как Inverse of Control, фасады в Laravel, работа с очередями и консольными командами. Также в докладе освещены другие интересные фичи фреймворка! PHP User Group Ukraine в социальных сетях: https://www.facebook.com/pug.ukraine https://vk.com/pug.ukraine https://www.linkedin.com/groups/PHP-User-Group-Ukraine-6703717TRANSCRIPT
![Page 1: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/1.jpg)
25 причинпопробовать
Laravel
$speaker = ‘Алексей Плеханов’;
![Page 2: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/2.jpg)
![Page 3: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/3.jpg)
Красноречивые запросы*
class Order extends Eloquent {}
* - Eloquent — название реализации Active Record в Laravel, а также в переводе с английского красноречивый.
![Page 4: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/4.jpg)
Красноречивые запросы*
class Order extends Eloquent {}
* - Eloquent — название реализации Active Record в Laravel, а также в переводе с английского красноречивый.
Order::all();
![Page 5: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/5.jpg)
Красноречивые запросы*
* - Eloquent — название реализации Active Record в Laravel, а также в переводе с английского красноречивый.
Order::orderBy('date','desc')->get();
![Page 6: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/6.jpg)
Красноречивые запросы*
* - Eloquent — название реализации Active Record в Laravel, а также в переводе с английского красноречивый.
$order = new Order;
$order->title = 'Xbox One';
$order->save();
![Page 7: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/7.jpg)
Гибкий роутинг
Route::get('orders', function(){ return View::make('orders.index') ->with('orders', Order::all());});
![Page 8: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/8.jpg)
Гибкий роутинг
Route::get('orders','OrdersController@index');
![Page 9: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/9.jpg)
RESTful-контроллеры
Route::controller('users', 'UserController');
![Page 10: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/10.jpg)
RESTful-контроллеры
Route::controller('users', 'UserController');class UserController extends BaseController { public function getIndex() { return View::make(‘user.index’); } public function postProfile() { $profile = new Profile(); } public function anyLogin() { return View::make(‘user.login’); }}
![Page 11: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/11.jpg)
Ресурс контроллеры
Route::resource('users', 'UserController');
![Page 12: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/12.jpg)
Ресурс контроллеры
Route::resource('users', 'UserController');● GET /users
● GET /users/:order
● GET /users/create
● GET /users/:order/edit
● POST /users
● PUT /users/:order
● PATCH /users/:order
● DELETE /users/:order
![Page 13: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/13.jpg)
Ресурс контроллеры
![Page 14: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/14.jpg)
Relations
class Task extends Eloquent { public function user() { return $this->belongsTo('User'); }}
class User extends Eloquent { public function tasks() { return $this->hasMany('Task'); }}
![Page 15: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/15.jpg)
Relations
$user = User::find(1);
$tasks = $user->tasks;
![Page 16: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/16.jpg)
Relations
$task = Task::find(1);
$user = $task->user;
![Page 17: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/17.jpg)
Кеш запросов в базу
Question::remember(60)->get();
![Page 18: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/18.jpg)
Композиторы шаблонов
View::composer('layouts.nav', function($view) { $view->with('tags', ['tag1', 'tag2']);
});
![Page 19: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/19.jpg)
Простая авторизация
$user = [ 'email' => 'email', 'password' => 'password']; if (Auth::attempt($user)){ return View::make(‘dashboard’);}
![Page 20: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/20.jpg)
Blade шаблонизатор
@if ($orders->count()) <ul> @foreach($orders as $order) <li>{{{ $order->title }}}</li> @endforeach </ul>@endif
![Page 21: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/21.jpg)
SSH
SSH::into('production')->run([ 'cd /var/www', 'git pull origin master']);
* Laravel >= 4.1.0
![Page 22: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/22.jpg)
События
Event::listen('user.signUp', function(){ $user = new User([‘email’ => ‘[email protected]’, ‘password’ => ‘12345’]);});
![Page 23: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/23.jpg)
События
Event::listen('user.signUp', function(){ $user = new User([‘email’ => ‘[email protected]’, ‘password’ => ‘12345’]);});
Event::listen('user.signUp', 'UserEventHandler');
![Page 24: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/24.jpg)
Pagination
User::paginate(15);
<div class="container"> <?php foreach ($users as $user): ?> <?php echo $user->name; ?> <?php endforeach; ?></div>
<?php echo $users->links(); ?>
![Page 25: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/25.jpg)
Очереди
Queue::push('SignUpService', compact('user'));
Amazon SQS Beanstalkd Iron.io
![Page 26: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/26.jpg)
Простая валидация
$order = [ 'title' => 'Wii U', 'description' => 'Game console from Nintendo'];$rules = [ 'title' => 'required', 'description' => 'required']; $validator = Validator::make($order, $rules);if ($validator->fails()) { var_dump($validator->messages()); // массив ошибок
}
![Page 27: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/27.jpg)
Tinker
php artisan tinker
* read-eval-print-loop
![Page 28: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/28.jpg)
Миграции
public function up() { Schema::create('faqs', function(Blueprint $table) { $table->integer('id', true); $table->text('question'); $table->text('answer'); $table->timestamps(); });} public function down() { Schema::drop('faqs');}
![Page 29: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/29.jpg)
Генераторы
php artisan generate:migration create_users_table --fields="username:string, password:string"
"way/generators"
![Page 30: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/30.jpg)
Консольные команды
php artisan command:make MyCustomCommand
class MyCustomCommand extends Command { protected $name = 'command:name'; protected $description = 'Command description.';
public function fire() {}}
![Page 32: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/32.jpg)
HTML хелперы
Html::mailto('[email protected]')Html::script('js/app.js')
Html::style('css/body.css')
<a href="mailto:test@ex.cc">test@ex.cc</a>
![Page 33: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/33.jpg)
HTML хелперы
{{ Html::mailto('[email protected]') }}{{ Html::script('js/app.js') }}
{{ Html::style('css/body.css') }}
{{ Form::open() }} {{ Form::text('name') }} {{ Form::textarea('bio') }} {{ Form::selectYear('dob', date('Y') - 80, date('Y')) }}{{ Form::close() }}
![Page 34: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/34.jpg)
Связь модели с формой
{{ Form::model($order) }} <div> {{ Form::label('title', 'Title:') }} {{ Form::text('title') }} </div> <div> {{ Form::label('description', 'Description:') }} {{ Form::textarea('description') }} </div>{{ Form::close() }}
![Page 35: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/35.jpg)
IoC
public function __construct(MyDependency $thing) { $this->thing = $thing;}
![Page 36: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/36.jpg)
IoC
public function __construct(MyDependency $thing) { $this->thing = $thing;}
$myClass = App::make('MyClass');
![Page 37: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/37.jpg)
Фасады
Auth::check()
Auth::attempt()
Cache::put()
Session::put()
Mail::send() Queue::push()
![Page 38: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/38.jpg)
Фасады
Auth::check()
Auth::attempt()
Cache::get()
Session::put()
Mail::send() Queue::push()
$value = $app->make('cache')->get('key');
![Page 39: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/39.jpg)
Environments
$env = $app->detectEnvironment([ 'local' => ['your-machine-name'],]);
![Page 40: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/40.jpg)
Environments
$env = $app->detectEnvironment([ 'local' => ['your-machine-name'],]);
$env = $app->detectEnvironment(function(){ return getenv('ENV_NAME') ?: 'local';});
![Page 41: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/41.jpg)
Простые конфиги
<?php // app/config/development/billing.php return [ 'api_key' =>'Dad2#@@d'];
Config::get(‘billing.api_key’)
![Page 42: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/42.jpg)
Обучаемость
https://leanpub.com/codebright https://laracasts.com/
https://leanpub.com/laravel
![Page 43: Алексей Плеханов: 25 причин попробовать Laravel](https://reader035.vdocuments.pub/reader035/viewer/2022062319/557cb1e3d8b42ab37c8b46cd/html5/thumbnails/43.jpg)
Спасибо за внимание!
aplekhanov@
dataart.com
vk.com/pugdnepr