5.2
Justas Maziliauskas
middleware groups
*"web" turi būti pirmasis masyve
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
],
'api' => [
'throttle:60,1',
],
'admin' => [
'web',
'auth',
]
];
Text
Text
rate limiting
Route::get('/api/users', ['middleware' => 'throttle:60,1'], function () {
//
}]);
Route::get('/api/users', ['middleware' => 'throttle'], function () {
//
}]);
HTTP/1.1 200 OK
...
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59
HTTP/1.1 429 Too Many Requests
...
Retry-After: 60 (59, 58, 57, 56, 54....)
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
Text
Text
Text
A) This request succeeded (the status is 200)
B) You can try this route 60 times per minute
C) You have 59 requests left for this minute
multi-auth
// config/auth.php
'guards' => [
'user' => [
'driver' => 'session',
'provider' => 'user',
],
'admin' => [
'driver' => 'session',
'provider' => 'admin',
],
],
'providers' => [
'user' => [
'driver' => 'eloquent',
'model' => 'App\User',
],
'admin' => [
'driver' => 'eloquent',
'model' => 'App\Admin',
],
],
$admin_credentials = [
'email' => 'admin@gmail.com',
'password' => 'complex_password',
];
$user_credentials = [
'email' => 'user@gmail.com',
'password' => 'stupid_password',
];
$auth = auth()->guard('admin');
$auth->attempt($admin_credentials);
// true
$auth->attempt($user_credentials);
// false
$auth = auth()->guard('user');
$auth->attempt($admin_credentials);
// false
$auth->attempt($user_credentials);
// true
timestamps
$table->timestamp('foo')->nullable();
$table->timestamp('foo')->useCurrent();
$table->nullableTimestamps();
Starting with MySQL 5.7, 0000-00-00 00:00:00
is no longer considered a valid date,
since strict mode is enabled
by default.
implicit route model binding
// before
Route::get('shoes/{id}', function ($id) {
$shoe = Shoe::findOrFail($id);
// Do stuff
});
// now
Route::get('shoes/{shoe}', function (App\Shoe $shoe) {
// Do stuff
});
class Shoe extends Model
{
public function getRouteKeyName()
{
return 'slug';
}
}
form array validation
<form>
<label>Company Name</label>
<input type="text" name="name">
<h3>Employees</h3>
<div class="add-employee">
<label>Employee Name</label>
<input type="text" name="employee[1][name]">
<label>Employee Title</label>
<input type="text" name="employee[1][title]">
</div>
<div class="add-employee">
<label>Employee Name</label>
<input type="text" name="employee[2][name]">
<label>Employee Title</label>
<input type="text" name="employee[2][title]">
</div>
<a href="#" class="js-create-new-add-employee-box">Add another employee</a>
<input type="submit">
</form>
array(2) {
["name"]=>
string(10) "Acme, Inc."
["employee"]=>
array(2) {
[1]=>
array(2) {
["name"]=>
string(10) "Joe Schmoe"
["title"]=>
string(11) "Head Person"
}
[2]=>
array(2) {
["name"]=>
string(18) "Conchita Albatross"
["title"]=>
string(21) "Executive Head Person"
}
}
}
// CompaniesController.php
public function store(Request $request)
{
$this->validate($request->all(), [
'name' => 'required|string',
'employee.*.name' => 'required|string',
'employee.*.title' => 'string',
]);
// Save, etc.
}
auth scaffolding
php artisan make:auth
vagrant@homestead:~/projects/test$ pa make:auth
Created View: /home/vagrant/projects/test/resources/views/auth/login.blade.php
Created View: /home/vagrant/projects/test/resources/views/auth/register.blade.php
Created View: /home/vagrant/projects/test/resources/views/auth/passwords/email.blade.php
Created View: /home/vagrant/projects/test/resources/views/auth/passwords/reset.blade.php
Created View: /home/vagrant/projects/test/resources/views/auth/emails/password.blade.php
Created View: /home/vagrant/projects/test/resources/views/layouts/app.blade.php
Created View: /home/vagrant/projects/test/resources/views/home.blade.php
Created View: /home/vagrant/projects/test/resources/views/welcome.blade.php
Installed HomeController.
Updated Routes File.
Authentication scaffolding generated successfully!
database dession driver
Schema::create('sessions', function ($table) {
$table->string('id')->unique();
$table->integer('user_id')->nullable();
$table->string('ip_address', 45)->nullable();
$table->text('user_agent')->nullable();
$table->text('payload');
$table->integer('last_activity');
});
eloquent global scope
static::addGlobalScope('finish', function(Builder $builder){
$builder->where('status','finished');
});
Task::withoutGlobalScope('finish')->get();
Task::withoutGlobalScopes()->get();
schedule
$schedule->command('emails:send')
->hourly()
->appendOutputTo($filePath);
mysql json column types
$table->json('column_name'); JSON equivalent for the database.
$table->jsonb('column_name'); JSONB equivalent for the database.
new helpers
validator()
/**
* Create a new Validator instance.
*
* @param array $data
* @param array $rules
* @param array $messages
* @param array $customAttributes
* @return \Illuminate\Contracts\Validation\Validator
*/
function validator(array $data = [], array $rules = [], array $messages = [], array $customAttributes = []){ ... }
$rules = [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|confirmed|min:6',
];
validator($request->all(), $rules);
dispatch()
dispatch(new SendReminderEmail($user));
/* Old */
$this->dispatch(new SendReminderEmail($user));
5.3
- PHP 5.6.4+
- The `lists` method on the Collection,
query builder and Eloquent query
builder objects has been
renamed to `pluck`
- Implicit controller routes using
Route::controller have been
deprecated
- The `get`, `post`, and other route
helper functions have been removed.
thx
- mattstauffer.co
- laravel.com
- laracasts.com
5.2
By Justas Maziliauskas
5.2
- 246