Алексей Плеханов: Новинки laravel 5
TRANSCRIPT
Environments
./.env
APP_ENV = local
DB_USER = root
DB_PASSWORD = secret
MAILGUN_API_KEY = d1fd1f13h6731gf32
getenv(‘DB_USER’)
vlucas/phpdotenv
Dependency Injection
public function __construct(MyDependency $thing) {
$this->thing = $thing;
}
$thing = App::make(‘MyDependency’);
Инъекция в методы
public function index(IosNotifier $notifier) {
$notifier->notify($deviceToken, $message);
}
Форм-запросы
public function store(StoreRequest $request) {
User::create([
‘email’ => $request->email,
‘name’ => $request->name
]);
}
Форм-запросы
class StoreRequest extends Request {
public function rules() {
return [
'email' => 'required|email',
‘name’ => ‘required|min:5’
];}
public function authorize() {
return Auth::user()->isAdmin();
}
}
Форм-запросы
$validator = Validator::make($rules, $data);
if ($validator->fails()) {
...
}
return Redirect::back();
Разные файловые системы
File::get('path');
File::put('path', 'contents');
Local S3 Rackspace
league/flysystem
Разные файловые системы
return [
‘default’ => ‘s3’, // or rackspace
‘disks’ => [
‘s3’ => [
‘driver’ => ‘s3’,
‘key’ => ‘your-key’,
‘secret’ => ‘your-secret’,
‘bucket’ => ‘your-bucket’
]]];
./config/filesystems.php
Middleware
class CsrfMiddleware implements Middleware {
public function handle($request, Closure $next) {
if (in_array($request->method(), ['HEAD', 'GET', 'OPTIONS'])) ||
$this->tokensMatch($request)) {
return $this->addCookieToResponse($request, $next($request));
}
throw new TokenMismatchException;
}
}
Аннотации (роуты)
/**
* @Get(“dogs”)
*/
public function index() {
return view(‘dogs.index’);
}
php artisan route:scan
Аннотации (роуты)
/**
* @Resource(“users”, only={“index”, “show”})
* @Middleware(“auth”, except={“index”})
*/
class UsersController {
public function index() {...}
public function show() {...}
}
php artisan route:scan
Аннотации (события)
class EmailNotifier {
/**
* @Hears(‘user.upgraded’)
*/
public function whenUserUpgraded() {
...
}
}
php artisan event:scan
Elixir (gulp.js)
var elixir = require(‘laravel-elixir’);
elixir(function(mix) {
mix.less("bootstrap.less")
.coffee()
.phpUnit()
.routes()
.events();
});
Elixir (gulp.js)
• coffee
• less / sass
• event-scan
• route-scan
• scripts / styles
• phpunit
• watch
Scheduler
$schedule->command('cache:clear')
->hourly()
->sendOutputTo($filePath)
->emailOutputTo('[email protected]');
* * * * * php /path/to/project/artisan schedule:run