рдирд┐рдпреЛрдЬрди рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рднреБрдЧрддрд╛рди рдЖрд╕рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рдпрдорд┐рдд рднреБрдЧрддрд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдХрдард┐рдирд╛рдЗрдпрд╛рдБ рдмрд╣реБрдд рдЬрд▓реНрджреА рдкреИрджрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдЖрдкрдХреЛ рдпрд╣ рддрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд░рд┐рдлрд╝реНрдпреВрд▓реНрд╕ рдХреЛ рдХреИрд╕реЗ рд╣реИрдВрдбрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рднреБрдЧрддрд╛рди рдбреЗрдЯрд╛ рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдЕрдк-рдЯреВ-рдбреЗрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╕рд╛рдЗрдЯ рдкрд░ рдбреЗрдЯрд╛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рд╕рд╛рдЗрдЯ рдкрд░ рднреБрдЧрддрд╛рди рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рд░рдЦреЗрдВред
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ,
Recurly рдПрдХ рдРрд╕реА рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ рдирд┐рдпрдорд┐рдд рднреБрдЧрддрд╛рди рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдЬреБрдбрд╝реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рднреБрдЧрддрд╛рди рдЬрд╛рдирдХрд╛рд░реА рднреЗрдЬрдиреЗ рдФрд░ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рдлрд╝реЙрд░реНрдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рднреБрдЧрддрд╛рди рдХрд╛рд░реНрдб рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рднреБрдЧрддрд╛рди рдХреА рд░рд╛рд╢рд┐ рдФрд░ рдЖрд╡реГрддреНрддрд┐ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдЕрдирд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рд╣реЛрдиреЗ рддрдХ, рднреБрдЧрддрд╛рди рдХреА рдЕрдиреБрд╕реВрдЪреА рдФрд░ рднреБрдЧрддрд╛рди рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИред рдЕрддрд┐рд░рд┐рдХреНрдд рднреБрдЧрддрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкреБрди: рдЯреИрд░рд┐рдл рдпреЛрдЬрдирд╛рдУрдВ, рдЧрдгрдирд╛, рдЬрдорд╛ рдФрд░ рдХрдЯреМрддреА рдореЗрдВ рднреА рдЦрд╛рддреЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рджреЛ рдХреЗ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рд▓рд╛рд░рд╡реЗрд▓ php рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЧрдИ рд╕рд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреБрдЧрддрд╛рди рдХреА рдЧрдИ рд╕рджрд╕реНрдпрддрд╛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рдП рдФрд░ Recurly рднреБрдЧрддрд╛рди рд╕реНрд╡реАрдХреГрддрд┐ рд╕реЗрд╡рд╛ред рд╣рдо рд╕рд░рд▓ рдкрдВрдЬреАрдХрд░рдг, рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдЗрдЯ рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред рдлрд┐рд░ рд╣рдо рднреБрдЧрддрд╛рди рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдЗрд╕реЗ рдкрдВрдЬреАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЯреИрд░рд┐рдл рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЦрд░реАрджрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВред
рдЖрдЗрдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдХрд░ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рд▓реЙрдиреНрдЪ рдХрд░рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ:
composer create-project laravel/laravel recurly --prefer-dist
рдпрд╣ рдХрдорд╛рдВрдб рдХрдореНрдкреЛрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдпрд╛ рд▓рд╛рд░рд╡реЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдЧрд╛ред рдмрд╛рдж рдореЗрдВ рд╣рдореЗрдВ рдХрдИ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдХрдВрдкреЛрдЬрд╝рд░.рдЬрд╕рди рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдХрдВрдкреЛрдЬрд╝рд░.рдкрд╣рд░ рдЕрджреНрдпрддрди рдЪрд▓рд╛рдПрдБ
"machuga/authority": "dev-develop", "machuga/authority-l4" : "dev-master", "recurly/recurly-client": "2.1.*@dev"
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рднреВрдорд┐рдХрд╛рдУрдВ рдФрд░ рдЕрдиреБрдорддрд┐рдпреЛрдВ, рдФрд░ рдкреБрдирд░реНрдЬреАрд╡рди рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдлрд┐рд░, рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди / config / database.php рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рд╕реНрдХреАрдо, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ рдкрддреЗ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓рд╛рд░рд╡реЗрд▓ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: MySql, Posrges, SQLite рдФрд░ SQL Serverред
рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╣рд╛рде рд╕реЗ рд╕рдм рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рд▓рд╛рд░рд╡реЗрд▓ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдкреНрд░рд╡рд╛рд╕рди рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдирд┐рдореНрди рдЖрджреЗрд╢ рдЪрд▓рд╛рдПрдБ:
php artisan migrate:make create_users_table
рдпрд╣ рдХрдорд╛рдВрдб
рдРрдк / рдбреЗрдЯрд╛рдмреЗрд╕ / рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдЧрд╛
public function up() { Schema::create('users', function($table) { $table->increments('id'); $table->string('email')->unique(); $table->string('name'); $table->string('password'); $table->timestamps(); }); } public function down() { Schema::drop('users'); }
рдЖрдЗрдП рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
php artisan migrate
рдЖрдЗрдП рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рджреЗрдЦреЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ Laravel рдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдИ рд╣реИред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рднреВрдорд┐рдХрд╛рдПрдБ рдФрд░ рдЕрдзрд┐рдХрд╛рд░ рдмрдирд╛рдПрдБред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рдЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреВрдорд┐рдХрд╛рдПрдБ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдСрдерд░рд╛рдЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╕рдВрдЧреАрддрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рдФрд░ рдЕрдм рд╣рдореЗрдВ рднреВрдорд┐рдХрд╛рдУрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / config / app.php рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ:
'Authority\AuthorityL4\AuthorityL4ServiceProvider',
рдЙрдкрдирд╛рдо рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ:
'Authority' => 'Authority\AuthorityL4\Facades\Authority',
рдФрд░ рдирд┐рдореНрди рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реЗрдЯрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ:
php artisan config:publish machuga/authority-l4
рд╣рдо рдмрд╛рдж рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ рдкрд░ рд▓реМрдЯ рдЖрдПрдВрдЧреЗред рдФрд░ рдЕрдм, рд╣рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдЯреЗрдмрд▓ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд▓рд╛рд░рд╡реЗрд▓ рдХреЗ рдкрд╛рд╕ рдЙрдирдХреЗ рд▓рд┐рдП рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рд╡рд╛рд╕ рд╣реИрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рдЪрд▓рд╛рдПрдВ:
php artisan migrate --package="machuga/authority-l4"
рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ 3 рдЕрддрд┐рд░рд┐рдХреНрдд рддрд╛рд▓рд┐рдХрд╛рдПрдБ рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВ:
рдЕрдиреБрдорддрд┐рдпрд╛рдБ ,
рднреВрдорд┐рдХрд╛рдПрдБ ,
role_user ред
рдЕрдм рд╣рдореЗрдВ рднреВрдорд┐рдХрд╛рдУрдВ рдФрд░ рдЕрднрд┐рдЧрдо рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдЬрдм рддрдХ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдирд╣реАрдВ рдмрджрд▓рддреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрд╣реБрдд рд╕рд░рд▓ рдирд╣реАрдВ рдЫреЛрдбрд╝рддреЗред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдореЙрдбрд▓ / рднреВрдорд┐рдХрд╛ рдореЗрдВ ред
<?php class Role extends Eloquent { }
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ:
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдореЙрдбрд▓ / Permission.php :
<?php class Permission extends Eloquent { }
рдЕрдм рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЙрдбрд▓ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЙрдирдХреА рднреВрдорд┐рдХрд╛рдУрдВ рдФрд░ рдПрдХреНрд╕реЗрд╕ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдореЙрдбрд▓ / User.php рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝реЗрдВ:
public function roles() { return $this->belongsToMany('Role'); } public function permissions() { return $this->hasMany('Permission'); } public function hasRole($key) { foreach($this->roles as $role){ if ($role->name === $key) { return true; } } return false; }
рдЕрдм рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдХреБрдЫ рдбреЗрдЯрд╛ рд╕реЗ рднрд░реЗрдВред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдбреЗрдЯрд╛рдмреЗрд╕ / рдмреАрдЬ / DatabaseSeeder.php рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ:
<?php class DatabaseSeeder extends Seeder { public function run() { Eloquent::unguard(); $this->call('UserTableSeeder'); $this->command->info('User table seeded!'); $this->call('RoleTableSeeder'); $this->command->info('Role table seeded!'); } } class UserTableSeeder extends Seeder { public function run() { DB::table('users')->delete(); User::create(array( 'email' => 'joe.bloggs@example.com', 'name' => 'Joe Bloggs', 'password' => Hash::make('password') )); } } class RoleTableSeeder extends Seeder { public function run() { DB::table('roles')->delete(); Role::create(array('name' => 'admin')); Role::create(array('name' => 'pending')); Role::create(array('name' => 'member')); Role::create(array('name' => 'bronze')); Role::create(array('name' => 'silver')); Role::create(array('name' => 'gold')); } }
рдЕрдЧрд▓рд╛, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдЪрд▓рд╛рдХрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рднрд░реЗрдВ:
php artisan db:seed
рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдПрдБ
рдЕрдм рд╣рдо рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдПрдВрдЧреЗред рдЗрд╕рдХреЗ рд▓рд┐рдП
рдЯреНрд╡рд┐рдЯрд░ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рд╕реНрд░реЛрддреЛрдВ рдХреЛ
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦреЗрдВ, рдФрд░ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ js рдлрд╛рдЗрд▓реЗрдВ -
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ / js / libs /рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ
рдРрдк / рд╡рд┐рдЪрд╛рд░ / рд▓реЗрдЖрдЙрдЯ / default.blade.php рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Subscription Site Tutorial</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="description" content=""> <meta name="author" content=""> <link href="/css/bootstrap.css" rel="stylesheet"> <link href="/css/style.css" rel="stylesheet"> </head> <body> <div class="navbar navbar-inverse navbar-fixed-top"> <div class="navbar-inner"> <div class="container"> <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="brand" href="#">Subscription Site Tutorial</a> <div class="nav-collapse collapse"> <ul class="nav"> <li class="active"><a href="#">Home</a></li> <li><a href="#about">About</a></li> <li><a href="#contact">Contact</a></li> </ul> </div> </div> </div> </div> <div class="container"> @if(Session::has('success')) <div class="alert alert-success"> <button type="button" class="close" data-dismiss="alert">├Ч</button> {{ Session::get('success') }} </div> @endif @if(Session::has('error')) <div class="alert alert-error"> <button type="button" class="close" data-dismiss="alert">├Ч</button> {{ Session::get('error') }} </div> @endif @yield('content') </div> <script src="http://code.jquery.com/jquery-1.10.2.min.js"></script> <script src="/js/libs/bootstrap.min.js"></script> </body> </html>
рдпрд╣ рд╣рдорд╛рд░реА рд╕рд╛рдЗрдЯ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╣реИ, рдкреГрд╖реНрда рд╕рд╛рдордЧреНрд░реА рдХреЛ рд▓рд╛рдЗрди рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
@yield ('рд╕рд╛рдордЧреНрд░реА') ред
рдЕрдЧрд▓рд╛, рдлрд╝рд╛рдЗрд▓
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд░реЗрдВ / css / style.css :
body { padding-top: 50px; } p.logged-in { color: white; margin-top: 0.5em; }
рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реА рд╕рд╛рдЗрдЯ рдХрд╛ рдореБрдЦреНрдп рдкреГрд╖реНрда рдмрдирд╛рдПрдВред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рд╡рд┐рдЪрд╛рд░ / рдШрд░ / index.blade.php рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ :
@extends('layouts.default') @section('content') <h1>Subscription Site Tutorial</h1> @stop
@extends рд▓рд╛рд░рд╡реЗрд▓ рдХреЛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдорд╛рд░реНрдЧреЛрдВ рдореЗрдВ рд╣рдорд╛рд░реА рд╕рд╛рдЗрдЯ рдХрд╛ рдорд╛рд░реНрдЧ рдмрджрд▓рдирд╛ рди рднреВрд▓реЗрдВред
Route::get('/', function() { return View::make('home/index'); });
рдПрдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рддрдВрддреНрд░ рдмрдирд╛рдПрдБ
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВ, рдФрд░ рдЕрдм рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдПрдкреНрд▓рд┐рдХреЗрд╢рди / routse.php рдлрд╝рд╛рдЗрд▓ рдореЗрдВ , рд▓реЙрдЧрд┐рди рдкреГрд╖реНрда рдкрд░ рдкрде рдЬреЛрдбрд╝реЗрдВ:
Route::get('/auth/login', function() { return View::make('auth/login'); });
рдЕрдм рд╣рдо рдлрд╛рдЗрд▓
рдРрдк / рд╡реНрдпреВ / рдСрд░реНрдЯрд┐рдХрд▓ / login.blade.php рдореЗрдВ рдбрд┐рд╕реНрдкреНрд▓реЗ рдмрдирд╛рдПрдВрдЧреЗ ред
.blacde рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдо рдмреНрд▓реЗрдб рдЯреЗрдореНрдкрд▓реЗрдЯ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ
рд▓рд╛рд░рд╡реЗрд▓ рдХреЗ рд╕рд╛рде
рдЖрддрд╛ рд╣реИ ред
@extends('layouts.default') @section('content') <h1>Please Log in</h1> {{ Form::open(array('url' => 'auth/login')) }} {{ Form::label('email', 'E-Mail Address') }} {{ Form::text('email') }} {{ Form::label('password', 'Password') }} {{ Form::password('password') }} <div class="form-actions"> {{ Form::submit('Login', array('class' => 'btn btn-primary')) }} </div> {{ Form::close() }} <p>Not a member? <a href="/user/register">Register here</a>.</p> @stop
рдпрджрд┐ рдЖрдк рдПрдбреНрд░реЗрд╕ / рдСрд░реНрдЯ / рд▓реЙрдЧрдПрди рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рдПрдХ рд╕рд░рд▓ рд▓реЙрдЧрд┐рди рдлреЙрд░реНрдо рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдЗрдирдкреБрдЯ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ POST рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓рд╛рд░рд╡реЗрд▓ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдирд╛ рд╕рд░рд▓ рд╣реИ:
Route::post('/auth/login', function() { $email = Input::get('email'); $password = Input::get('password'); if (Auth::attempt(array('email' => $email, 'password' => $password))) { return Redirect::to('/')->with('success', 'You have been logged in'); } else { return Redirect::to('auth/login')->with('error', 'Login Failed'); } return View::make('auth/login'); });
рд╕рднреА рдЬрд╛рджреВ
рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рдореЗрдВ рд╣реИ :: рдкреНрд░рдпрд╛рд╕ () рд╡рд┐рдзрд┐, рдпрджрд┐ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ рдПрдХ рд╕рддреНрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реНрдереИрддрд┐рдХ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ :: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ () рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЦрд╛рддрд╛ рд▓реЙрдЧрдЖрдЙрдЯ рд╡рд┐рдзрд┐:
Route::get('/auth/logout', function() { Auth::logout(); return Redirect::to('/')->with('success', 'You have successfully logged out'); });
рдореВрд▓ рдкрдВрдЬреАрдХрд░рдг
рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдорд╛рд░рд╛ рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдп рдкрдВрдЬреАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдирд╛ рд╣реИред
рдРрдк / рдкрдВрдЬреАрдХрд░рдг / php рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╛рд╕реНрддрд╛ рдмрдирд╛рдПрдБ:
Route::get('/user/register', function() { return View::make('user/register/index'); });
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рджреГрд╢реНрдп рдмрдирд╛рдПрдВ
/app/views/user/register/index.blade.php :
@extends('layouts.default') @section('content') {{ Form::open(array('url' => 'user/register')) }} {{ Form::label('email', 'E-Mail Address') }} {{ Form::text('email') }} {{ $errors->first('email') }} {{ Form::label('name', 'Your name') }} {{ Form::text('name') }} {{ $errors->first('name') }} {{ Form::label('password', 'Password') }} {{ Form::password('password') }} {{ $errors->first('password') }} {{ Form::label('password_confirmation', 'Repeat') }} {{ Form::password('password_confirmation') }} <div class="form-actions"> {{ Form::submit('Register', array('class' => 'btn btn-primary')) }} </div> {{ Form::close() }} @stop
рдореИрдВ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛:
- $ рддреНрд░реБрдЯрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рджреГрд╢реНрдп рдореЗрдВ рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдХреЛрдИ рд╕рддреНрдпрд╛рдкрди рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝реАрд▓реНрдб рдЦрд╛рд▓реА рд╣реЛрдЧреА
- рдкреНрд░рддреНрдпрдп _рд╕рдВрдХреНрд░рдордг рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдлрд╝реАрд▓реНрдб рдХреЛ рдкреНрд░рддреНрдпрдп рдХреЗ рдмрд┐рдирд╛ рдлрд╝реАрд▓реНрдб рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рддред рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдкрд╛рд╕рд╡рд░реНрдб рджреЛрдиреЛрдВ рдмрд╛рд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
рдЕрдм POST рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ:
Route::post('/user/register', function() { $validator = Validator::make( Input::all(), array( 'name' => array('required', 'min:5'), 'email' => array('required', 'email', 'unique:users'), 'password' => array('required', 'confirmed') ) ); if ($validator->passes()) { $user = new User(); $user->name = Input::get('name'); $user->email = Input::get('email'); $user->password = Hash::make(Input::get('password')); $user->save(); $role_pending = Role::where('name', '=', 'pending')->first(); $user->roles()->attach($role_pending); Auth::login($user); return Redirect::to('/')->with( 'success', 'Welcome to the site, . Auth::user()->name . '!' ); } else { return Redirect::to('user/register')->with( 'error', 'Please correct the following errors:' )->withErrors($validator); } });
рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рддрд░реАрдХрд╛ рд╣реИред рд╣рдо рдПрдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ POST рдбреЗрдЯрд╛ (рдЗрдирдкреБрдЯ :: рд╕рднреА) () рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╕рддреНрдпрд╛рдкрди рдмреАрдд рдЪреБрдХрд╛ рд╣реИ, рддреЛ рдЖрдк рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрд╕реЗ рднреВрдорд┐рдХрд╛рдПрдБ рд╕реМрдВрдкрддреЗ рд╣реИрдВ, рдЕрдзрд┐рдХреГрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕реЗ рдореБрдЦреНрдп рдкреГрд╖реНрда рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдпрджрд┐ рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдлреЙрд░реНрдо рдореЗрдВ рд╡рд╛рдкрд╕ рднреЗрдЬ рджреЗрддреЗ рд╣реИрдВ, рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд╕реЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ $ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдЪрд░ рдореЗрдВ рджреГрд╢реНрдп рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рд╕рд╢реБрд▓реНрдХ рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ "рдХрдВрдХрд╛рд▓" рдХреЛ рдЪрд░рдг рджрд░ рдЪрд░рдг рдмрдирд╛рдпрд╛ред рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рд░рд┐рдЪрд╛рд░реНрдЬ рдХреЛ рд╕рджрд╕реНрдпрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреАрдХреГрдд рдХрд░реЗрдВрдЧреЗред