Алексей Плеханов: 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
25 причинпопробовать
Laravel
$speaker = ‘Алексей Плеханов’;
Красноречивые запросы*
class Order extends Eloquent {}
* - Eloquent — название реализации Active Record в Laravel, а также в переводе с английского красноречивый.
Красноречивые запросы*
class Order extends Eloquent {}
* - Eloquent — название реализации Active Record в Laravel, а также в переводе с английского красноречивый.
Order::all();
Красноречивые запросы*
* - Eloquent — название реализации Active Record в Laravel, а также в переводе с английского красноречивый.
Order::orderBy('date','desc')->get();
Красноречивые запросы*
* - Eloquent — название реализации Active Record в Laravel, а также в переводе с английского красноречивый.
$order = new Order;
$order->title = 'Xbox One';
$order->save();
Гибкий роутинг
Route::get('orders', function(){ return View::make('orders.index') ->with('orders', Order::all());});
Гибкий роутинг
Route::get('orders','OrdersController@index');
RESTful-контроллеры
Route::controller('users', 'UserController');
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’); }}
Ресурс контроллеры
Route::resource('users', 'UserController');
Ресурс контроллеры
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
Ресурс контроллеры
Relations
class Task extends Eloquent { public function user() { return $this->belongsTo('User'); }}
class User extends Eloquent { public function tasks() { return $this->hasMany('Task'); }}
Relations
$user = User::find(1);
$tasks = $user->tasks;
Relations
$task = Task::find(1);
$user = $task->user;
Кеш запросов в базу
Question::remember(60)->get();
Композиторы шаблонов
View::composer('layouts.nav', function($view) { $view->with('tags', ['tag1', 'tag2']);
});
Простая авторизация
$user = [ 'email' => 'email', 'password' => 'password']; if (Auth::attempt($user)){ return View::make(‘dashboard’);}
Blade шаблонизатор
@if ($orders->count()) <ul> @foreach($orders as $order) <li>{{{ $order->title }}}</li> @endforeach </ul>@endif
SSH
SSH::into('production')->run([ 'cd /var/www', 'git pull origin master']);
* Laravel >= 4.1.0
События
Event::listen('user.signUp', function(){ $user = new User([‘email’ => ‘[email protected]’, ‘password’ => ‘12345’]);});
События
Event::listen('user.signUp', function(){ $user = new User([‘email’ => ‘[email protected]’, ‘password’ => ‘12345’]);});
Event::listen('user.signUp', 'UserEventHandler');
Pagination
User::paginate(15);
<div class="container"> <?php foreach ($users as $user): ?> <?php echo $user->name; ?> <?php endforeach; ?></div>
<?php echo $users->links(); ?>
Очереди
Queue::push('SignUpService', compact('user'));
Amazon SQS Beanstalkd Iron.io
Простая валидация
$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()); // массив ошибок
}
Tinker
php artisan tinker
* read-eval-print-loop
Миграции
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');}
Генераторы
php artisan generate:migration create_users_table --fields="username:string, password:string"
"way/generators"
Консольные команды
php artisan command:make MyCustomCommand
class MyCustomCommand extends Command { protected $name = 'command:name'; protected $description = 'Command description.';
public function fire() {}}
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>
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() }}
Связь модели с формой
{{ Form::model($order) }} <div> {{ Form::label('title', 'Title:') }} {{ Form::text('title') }} </div> <div> {{ Form::label('description', 'Description:') }} {{ Form::textarea('description') }} </div>{{ Form::close() }}
IoC
public function __construct(MyDependency $thing) { $this->thing = $thing;}
IoC
public function __construct(MyDependency $thing) { $this->thing = $thing;}
$myClass = App::make('MyClass');
Фасады
Auth::check()
Auth::attempt()
Cache::put()
Session::put()
Mail::send() Queue::push()
Фасады
Auth::check()
Auth::attempt()
Cache::get()
Session::put()
Mail::send() Queue::push()
$value = $app->make('cache')->get('key');
Environments
$env = $app->detectEnvironment([ 'local' => ['your-machine-name'],]);
Environments
$env = $app->detectEnvironment([ 'local' => ['your-machine-name'],]);
$env = $app->detectEnvironment(function(){ return getenv('ENV_NAME') ?: 'local';});
Простые конфиги
<?php // app/config/development/billing.php return [ 'api_key' =>'Dad2#@@d'];
Config::get(‘billing.api_key’)
Обучаемость
https://leanpub.com/codebright https://laracasts.com/
https://leanpub.com/laravel
Спасибо за внимание!
aplekhanov@
dataart.com
vk.com/pugdnepr