рд╕рд╛рдЗрдЯреЗрдВ рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдирд┐рдпрдВрддреНрд░рдг рдХрдХреНрд╖ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рджреЗрдирд╛ рд╣реЛрдЧрд╛ред рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рддрдХ рд╕рд░рд▓, рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд░реВрдк рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреБрд╕реНрдЦрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рд▓реЗрдЦ рдореЗрдВ рд▓рд╛рд░рд╡реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рддрдХрдиреАрдХреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрдм рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдФрд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬреЛ рдЗрд╕ рд░реВрдкрд░реЗрдЦрд╛ рдХреЛ рд╕реАрдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ Ubuntu 12.04, PostgreSQL 9.3, Nginx 1.1.19, PHP 5.5.7, рд╕рдВрдЧреАрддрдХрд╛рд░ рдФрд░ рд▓рд╛рд░рд╡реЗрд▓ 4.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЧрдИ рдПрдХ рддрд╛рдЬрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред PostgreSQL рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдбреЗрдЯрд╛рдмреЗрд╕ рдХрддрд╛рдИ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╣реА рдкрд╛рд╕рд╡рд░реНрдб рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИред Nginx рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрдм рдкрддрд╛ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп
examples.loc
example.loc рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕реНрдЯрдм рдореБрдЦреНрдп рдкреГрд╖реНрда рдЦреБрд▓рддрд╛ рд╣реИ, рдЬреЛ рд▓рд╛рд░рд╡реЗрд▓ рдХреЗ рдмрдВрдбрд▓ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╢рд┐рд▓рд╛рд▓реЗрдЦ "рдЖрдк рдЖ рдЧрдП рд╣реИрдВред"
рд╕рдВрдкрд╛рджрди рдпреЛрдЧреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рднреА рдкрде рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рджрд░реНрд╢рд╛рдП рдЧрдП рд╣реИрдВред
рдкрд░реНрдпрд╛рд╡рд░рдг
рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рд▓рд╛рд░рд╡реЗрд▓ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА
app/config/local
рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕рдореЗрдВ
database.php
рдлрд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ:
<?php return array( 'default' => 'pgsql', 'connections' => array( 'pgsql' => array( 'driver' => 'pgsql', 'host' => 'localhost', 'database' => 'examples', 'username' => 'examples', 'password' => 'examples', 'charset' => 'utf8', 'prefix' => '', 'schema' => 'public', ), ), );
рдореИрдВ рд▓рд╛рд░рд╡реЗрд▓ рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ
local
рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк / start.php рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдФрд░ рд▓рд╛рдЗрди рдХреЛ
'your-machine-name'
рдХреЛ
'*'
рдмрджрд▓реЗрдВ:
рд╕рдВрддрд░реА рдХрдиреЗрдХреНрд╢рди
рд╕рдВрддрд░реА рдХрдиреЗрдХреНрд╢рди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рд▓рд┐рдВрдХ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реВрдВред
рдореИрдВ
"cartalyst/sentry": "2.0.*"
рд▓рд╛рдЗрди
"cartalyst/sentry": "2.0.*"
require
рдмреНрд▓реЙрдХ рдореЗрдВ
"cartalyst/sentry": "2.0.*"
ред
рдореИрдВ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ:
$ composer update
$ рд╡рд░реНрдг рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ$ рдкреНрд░рддреАрдХ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ composer update
рдЯрд╛рдЗрдк composer update
рдлрд╝рд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди / config / app.php рдореЗрдВ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
'Cartalyst\Sentry\SentryServiceProvider',
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / config / app.php рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрдкрдирд╛рдореЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
'Sentry' => 'Cartalyst\Sentry\Facades\Laravel\Sentry',
рд╕рдВрддрд░реА рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛:
$ php artisan migrate --package=cartalyst/sentry
рдореИрдВ рд╕рдВрддрд░реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ:
$ php artisan config:publish cartalyst/sentry
рд╕рдВрдкрд╛рджрди
app/config/packages/cartalyst/sentry/config.php
рд▓рд┐рдП рдЦреЛрд▓реЗрдВред рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ
'login_attribute' => 'email'
рдФрд░ рдЗрд╕реЗ
'login_attribute' => 'username'
, рддрд╛рдХрд┐ рд╕рдВрддрд░реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрд╕рдХреЗ рд▓реЙрдЧрд┐рди рд╕реЗ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░реЗрдЧрд╛, рди рдХрд┐ рдИ-рдореЗрд▓ рд╕реЗред
рд╕рдВрддрд░реА рдкрд▓рд╛рдпрди рдХрд░рддреЗ рд╕рдордп, рдПрдХ
users
рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдИ рдЧрдИ рдереА рдЬрд┐рд╕рдореЗрдВ рдПрдХ
email
рдлрд╝реАрд▓реНрдб рд╣реИ рд▓реЗрдХрд┐рди рдХреЛрдИ
username
рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕рдВрддрд░реА рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд▓рд╛рдкрддрд╛ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдмрдирд╛рдПрдВ:
$ php artisan migrate:make alter_users_add_username
app/database/migration
рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ, рдПрдХ рдлрд╝рд╛рдЗрд▓ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рддрд┐рдерд┐ рдФрд░ рд╕рдордп рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ рдФрд░ рдпрд╣
alter_users_add_username.php
ред
alter_users_add_username.php
рд╕рд╛рде рд╣реЛрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ:
<?php use Illuminate\Database\Migrations\Migration; class AlterUsersAddUsername extends Migration { public function up() { Schema::table('users', function($table) { $table->string('username'); }); } public function down() { Schema::table('users', function($table) { $table->dropColumn('username'); }); } }
рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддрд╛ рд╣реВрдВ:
$ php artisan migrate
рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВ:
$ php artisan migrate:rollback
рдореИрдВ рдПрдХ рдФрд░ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдмрдирд╛рддрд╛ рд╣реВрдВ, рдЬреЛ
users
рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдПрдХ рд╕реБрдкрд░рдпреВрдЬрд╝рд░ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЛрдбрд╝рддрд╛ рд╣реИ:
$ php artisan migrate:make add_user_admin
рдореИрдВ
app/database/migrate
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдРрд╕реА рдлрд╝рд╛рдЗрд▓
add_user_admin.php
рдЬреЛ
add_user_admin.php
рд╕рд╛рде рд╕рдорд╛рдкреНрдд
add_user_admin.php
рдФрд░ рдЗрд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреА рд╣реИ:
<?php use Illuminate\Database\Migrations\Migration; class AddUserAdmin extends Migration { public function up() { $user = Sentry::createUser(array( 'username' => 'admin', 'email' => 'admin@examples.loc', 'password' => 'password', 'activated' => 1, 'permissions' => array( 'superuser' => 1, ), )); } public function down() { User::where('username', '=', 'admin')->firstOrFail()->delete(); } }
рдореИрдВ рдЬрд╛рдВрдЪрддрд╛ рд╣реВрдВ рдХрд┐ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреИрд╕реЗ рд░реЛрд▓ рдФрд░ рд░реЛрд▓ рдмреИрдХ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдореИрдВ рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рдиреЗ рдХреА рдУрд░ рдореБрдбрд╝рддрд╛ рд╣реВрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ред
рд▓реЙрдЧ рдЗрди рдлреЙрд░реНрдо
app/controllers
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ,
app/controllers
AuthController.php
рдлрд╝рд╛рдЗрд▓
AuthController.php
:
<?php class AuthController extends BaseController { public function getLogin() { $title = ''; return View::make('auth.login', compact('title')); } }
getLogin()
рд╡рд┐рдзрд┐
$title
рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреГрд╖реНрда рд╢реАрд░реНрд╖рдХ рдХреЛ
getLogin()
рдкрд╛рд╕ рджреЗрддреА рд╣реИ, рдЬреЛ рдПрдбрдорд┐рди рд▓реЙрдЧрд┐рди рдкреЗрдЬ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред
рдПрдХ рджреЗрдЦреЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
app/views
рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ
login.blade.php
рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ рдЬреЛрдбрд╝реЗрдВ рдФрд░
login.blade.php
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:
@extends('layout') @section('main') <div class="container"> {{ Form::open(array('class' => 'form-signin')) }} @if (!$errors->isEmpty()) <div class="alert alert-danger"> @foreach ($errors->all() as $error) <p>{{ $error }}</p> @endforeach </div> @endif <h2 class="form-signin-heading">{{ $title }}</h2> {{ Form::text('username', null, array('class' => 'form-control', 'placeholder' => '')) }} {{ Form::password('password', array('class' => 'form-control', 'placeholde' => '')) }} <label class="checkbox"> {{ Form::checkbox('remember-me', 1) }} </label> {{ Form::submit('', array('class' => 'btn btn-lg btn-primary btn-block')) }} {{ Form::close() }} </div> @stop
login.blade.php
рдЯреЗрдореНрдкреНрд▓реЗрдЯ
login.blade.php
.
login.blade.php
рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЗрд╕реЗ
app/views
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдмрдирд╛рддрд╛ рд╣реВрдВ:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>{{ $title }}</title> @section('styles') {{ HTML::style('//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css') }} {{ HTML::style(URL::asset('styles/base.css')) }} @show </head> <body> @yield('main') @section('scripts') {{ HTML::script('//netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js') }} @show <body> </html>
рдирд┐рдпрдВрддреНрд░рдХ рд╡рд┐рдзрд┐ рдФрд░ рдЙрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд░реВрдЯрд┐рдВрдЧ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкрддреЗ рдкрд░ рднреЗрдЬреЗ рдЧрдП рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛ рд╕рдХреЗрдВ
examples.loc/login
getLogin()
examples.loc/login
,
getLogin()
рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЧрдП рдереЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
app/routes.php
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
Route::get()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП
Route::get()
рдПрдХ рдорд╛рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛
Route::get()
, рдЬрд┐рд╕реЗ
getLogin()
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ
getLogin()
AuthController
рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ
getLogin()
/login
рд╡рд┐рдзрд┐ рдХреЛ GET рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИред
рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд╕рдореВрд╣ рдореЗрдВ рднреА Cort.login
auth.login
рд░рдЦрд╛ред рдЗрд╕ рд╕рдореВрд╣ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рд╕реА рднреА рдорд╛рд░реНрдЧ рд╕реЗ рдкрд╣рд▓реЗ,
guest
рдлрд╝рд┐рд▓реНрдЯрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкрддреЗ
/login
рдкрд░ GET рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗрд╡рд▓ рддрднреА рд╣реЛрдЧрд╛ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрддрд┐рдерд┐ рд╣реИ, рдЕрд░реНрдерд╛рддред рдЕрдзрд┐рдХреГрдд рдирд╣реАрдВ рд╣реИред
рдореИрдВ
guest
рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреВрдВрдЧрд╛ рддрд╛рдХрд┐ рд╡рд╣ рд╕рдВрддрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
app/filters.php
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ,
app/filters.php
guest
рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛрдб рдмрджрд▓ рджреВрдВрдЧрд╛:
рдЕрдм рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд▓реЙрдЧрд┐рди рдлреЙрд░реНрдо рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд░ рдЬрд╛рдПрдВ
examples.loc/login
examples.loc/login
рдФрд░ ...
рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛
Call to undefined method Illuminate\Cookie\CookieJar::get()
ред
рдПрдХ рд╣рд▓реНрдХреЗ Google рдЖрдВрджреЛрд▓рди рдХреЗ рд╕рд╛рде, рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╕реЗрдВрдЯреНрд░реА 2.0 рд▓рд╛рд░рд╡реЗрд▓ 4.0 рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ, рд▓реЗрдХрд┐рди 4.1 рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдХрд┐ рд╕рдВрддрд░реА 2.1 рдкрд╣рд▓реЗ рд╣реА рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред рддреНрд░реБрдЯрд┐ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ
composer.json
рдореЗрдВ рд╕рдВрддрд░реА рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ 2.1 рдореЗрдВ рдмрджрд▓рд╛:
рдореИрдВ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ:
$ composer update
рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ
examples.loc/login
examples.loc/login
рдФрд░ рдореИрдВ рд▓реЙрдЧрд┐рди рдлрд╝реЙрд░реНрдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рджреЗрдЦрддрд╛ рд╣реВрдВред рдлрд╝реЙрд░реНрдо рдХреЛ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреБрдЫ CSS рдЬреЛрдбрд╝рдиреЗ рд╣реЛрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
public
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ,
styles
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВ рдФрд░
base.css
рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реЗрдВ:
body { padding-top: 40px; padding-bottom: 40px; background-color: #eee; } .form-signin { max-width: 330px; padding: 15px; margin: 0 auto; } .form-signin .form-signin-heading, .form-signin .checkbox { margin-bottom: 10px; } .form-signin .form-signin-heading { text-align: center; } .form-signin .checkbox { font-weight: normal; } .form-signin .form-control { position: relative; font-size: 16px; height: auto; padding: 10px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .form-signin .form-control:focus { z-index: 2; } .form-signin input[type="text"] { margin-bottom: -1px; border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .form-signin input[type="password"] { margin-bottom: 10px; border-top-left-radius: 0; border-top-right-radius: 0; }
рдирд┐рдпрдВрддреНрд░рдХреЛрдВ
рдЕрдм рдлреЙрд░реНрдо рдХреЛ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк "рд▓реЙрдЧрд┐рди" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рддреНрд░реБрдЯрд┐ 404 рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ
/login
рдкрддреЗ рдкрд░ рднреЗрдЬреЗ рдЧрдП
AuthController
рдХреЛ POST рдЕрдиреБрд░реЛрдз рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
<?php class AuthController extends BaseController { public function getLogin() { $title = ''; return View::make('auth.login', compact('title')); } public function postLogin() { Input::flash(); try { $credentials = array( 'username' => Input::get('username'), 'password' => Input::get('password') ); $user = Sentry::authenticate($credentials, Input::get('remember-me')); } catch (Exception $e) { return Redirect::to(route('auth.login')) ->withErrors(array($e->getMessage())); } return Redirect::intended(route('admin')); } public function getLogout() { Sentry::logout(); return Redirect::route('auth.login'); } }
postLogin()
рд╡рд┐рдзрд┐ рдореЗрдВ, рдлреЙрд░реНрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрдорд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛
Input::flash()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рддреНрд░ рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
try
рдмреНрд▓реЙрдХ рдореЗрдВ, рд╕рдВрддрд░реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдЗрдирдкреБрдЯ рдлреЙрд░реНрдо рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ "рдпрд╛рдж рд░рдЦреЗрдВ" рдЪреЗрдХрдмреЙрдХреНрд╕ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ
Sentry::authenticate()
рдореЗрдВ рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░
Sentry::authenticate()
true
рд╣реЛрдЧрд╛ рдФрд░ рд╕рдВрддрд░реА рд╕рдлрд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╛рдж рд░рдЦреЗрдЧрд╛ред рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рдлрд▓ рдирд╣реАрдВ рд╣реБрдЖ, рддреЛ
catch
рдореЗрдВ
Redirect::to()
рдкрджреНрдзрддрд┐ рд╣рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдЗрдирдкреБрдЯ рдкреЗрдЬ рдкрд░ рднреЗрдЬ рджреЗрдЧреАред рд╕рдлрд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ,
Redirect::intended()
рд╡рд┐рдзрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрд╕ рдкреЗрдЬ рдкрд░ рднреЗрдЬ рджреЗрдЧреА рдЬрд┐рд╕реЗ рдЙрд╕рдиреЗ рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдЗрдирдкреБрдЯ рдлреЙрд░реНрдо рдореЗрдВ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд┐рдпрд╛ рдерд╛ред рдпрджрд┐ рдРрд╕рд╛ рдХреЛрдИ рдкреГрд╖реНрда рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдкрддрд╛
/admin
рдкрд░ рдПрдХ рдкреГрд╖реНрда рдЦреБрд▓ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдирд╛рдо
admin
рд╕рд╛рде рдПрдХ рдорд╛рд░реНрдЧ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред
getLogin()
рд╡рд┐рдзрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд▓реЙрдЧ рдЖрдЙрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкреГрд╖реНрда рдкрд░ рдкреБрдирдГ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд░реВрдЯрд┐рдВрдЧ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ
/admin
рдХреЛ рднреЗрдЬреЗ рдЧрдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓
app/controllers/HomeController.php
рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
<?php class HomeController extends BaseController { public function showWelcome() { return View::make('hello'); } public function getAdmin() { return link_to(route('auth.logout'), ''); } }
getAdmin()
рд╡рд┐рдзрд┐ рдмрд╕ рдкреГрд╖реНрда рдкрд░ "рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ" рд▓рд┐рдВрдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрдм рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧ рдЖрдЙрдЯ рдХрд░реЗрдЧрд╛ред
рдорд╛рд░реНрдЧ
рдЕрдм, рддрд╛рдХрд┐ рдирдП рддрд░реАрдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХреЗрдВ, рдореИрдВ рдЗрд╕реЗ
app/routes.php
рдореЗрдВ рд╕рдВрдкрд╛рджрд┐рдд
app/routes.php
Route::get('/', function() { return View::make('hello'); }); Route::group(array('before' => 'guest'), function () { Route::get('login', array( 'as' => 'auth.login', 'uses' => 'AuthController@getLogin' )); Route::post('login', array( 'before' => 'csrf', 'uses' => 'AuthController@postLogin' )); }); Route::group(array('before' => 'auth'), function () { Route::get('admin', array( 'as' => 'admin', 'uses' => 'HomeController@getAdmin', )); Route::get('logout', array( 'as' => 'auth.logout', 'uses' => 'AuthController@getLogout' )); });
рдорд╛рд░реНрдЧреЛрдВ рдХрд╛ рдкрд╣рд▓рд╛ рд╕рдореВрд╣, рдЬрд┐рд╕рдХреЗ рдкрд╣рд▓реЗ
guest
рдлрд╝рд┐рд▓реНрдЯрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдореЗрдВ GET рдФрд░ POST рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП
/login
рдкрддреЗ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИред
guest
рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдореЗрд╣рдорд╛рдиреЛрдВ рд╕реЗ рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдз
/login
рдкрддреЗ рдкрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЕрд░реНрдерд╛рдд рдЕрдирдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ред
рдорд╛рд░реНрдЧреЛрдВ рдХрд╛ рджреВрд╕рд░рд╛ рд╕рдореВрд╣, рдЬрд┐рд╕рдХреЗ рдкрд╣рд▓реЗ
auth
рдлрд╝рд┐рд▓реНрдЯрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореЗрдВ рдкрддреЛрдВ
/admin
рдФрд░
/logout
рд▓рд┐рдП рдорд╛рд░реНрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
auth
рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЗрди рдкрддреЗ рдкрд░ рдХреЗрд╡рд▓ рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрддреЗ рд╣реА рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
рдпрд╣ рднреА рдХрд┐ рдпрд╣ рд╕рдВрддрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдлрд┐рд▓реНрдЯрд░ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
app/filters.php
рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ
app/filters.php
рдирд┐рдореНрди рдХреЗ рд░реВрдк рдореЗрдВ
auth
рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдмрджрд▓реЗрдВ:
рдЕрдм рдЖрдк рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдЕрдирдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛
/admin
рдкреГрд╖реНрда рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдкрд╛рдПрдЧрд╛, рдпрд╣ рд╕рдлрд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдмрд╛рдж рд╣реА рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдмрд╛рдж,
/login
рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реЛрдЧрд╛ред
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд▓рд╛рд░рд╡реЗрд▓ рдХреЗ рдХреБрдЫ рддрддреНрд╡реЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред
рд╕рдВрдмрдВрдзрд┐рдд рд▓рд┐рдВрдХ
getcomposer.org/doc/00-intro.md#installation-nixlaravel.com/docs/installation#install-laravelcartalyst.com/manual/sentry/installation/laravel-4рдпреБрдкреАрдбреА
Github.com/bskton/examples/tree/eform рдирдореВрдирд╛ рдХреЛрдб