рд▓рд╛рд░рд╡реЗрд▓: рдмреБрдирд┐рдпрд╛рджреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реЗрдВред рднрд╛рдЧ рджреЛ: рдЕрднреНрдпрд╛рд╕

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рд╣рдо "рдлреНрд░реЗрдорд╡рд░реНрдХ рд▓рд╛рд░рд╡реЗрд▓" рдкрд╛рдареНрдпрдХреНрд░рдо рдХреА рд╢реБрд░реБрдЖрдд рдХреА рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдореЗрдВ рдХреЙрдкреАрд░рд╛рдЗрдЯ рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рд▓рд╛рд░рд╡реЗрд▓ рдХреА рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдиреАрдВрд╡ рдХреЛ рджреЗрдЦрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд┐рд╕реА рднреА рд░реВрдкрд░реЗрдЦрд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЬрдм рддрдХ рдЖрдк рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓рд┐рдЦрддреЗ рддрдм рддрдХ рдХреБрдЫ рднреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред



рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧ рдЗрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдирдП рдПрд▓реНрдмрдо рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдВ рдлреЛрдЯреЛ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрднреА рддрдХ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдорд╡реАрд╕реА рдХреНрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдкрдврд╝реЗрдВ , рдЬрд▓реНрдж рд╣реА рдЖрдкрдХреЛ рдЗрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ред

рдЗрд╕ рддрд░рд╣ рдХреА рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛рдПрдБ рдЖрдкрдХреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдЖрджрд┐ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдордВрдЪ рдкрд░ рдпрд╣ рдЕрд▓рдЧ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд▓реЗрдЦ рд╕рднреА рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛред рдореИрдВ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рд▓рд┐рдВрдХ рджреВрдВрдЧрд╛, рдФрд░ рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред

рддреЛ рд╣рдореЗрдВ рдЬрд░реВрд░рдд рд╣реИ:



рд╕рдВрдЧреАрддрдХрд╛рд░ред рдЯреИрдВрдХ рдореЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рд╕рдВрдЧреАрддрдХрд╛рд░ PHP рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХ рд╣реИ (рд╣рд╛рдБ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдирдкреАрдПрдо рдХреА рддрд░рд╣)ред рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдБ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЦреБрдж рд▓рд╡рд░рд╡реЗрд▓ ред рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рд╣реИрдВ: рд╣реЛрдорд╕реНрдЯреЗрдб рдФрд░ рд╡реИрд▓реЗрдЯ (рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдИ рдЕрдиреНрдп)ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмрд╛рдж рд╡рд╛рд▓рд╛ рдХреЗрд╡рд▓ рдореИрдХ рдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рдкрд╛рдардХ рдХрд┐рд╕реА рднреА рдкрд╕рдВрджреАрджрд╛ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рдХреЗрд╡рд▓ рдпрд╣ рдЗрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред

рдФрд░ рдПрдХ рд╕реВрдХреНрд╖реНрдо рд╡рд┐рд╕реНрддрд╛рд░, рд▓реЗрдХрд┐рди Npm рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Node.js рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВ: composer global require laravel/installer рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП composer global require laravel/installer ред

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЖрдкрдХреЗ $Home/.composer/vendor/bin рдореЗрдВ $Home/.composer/vendor/bin (рдпрд╛ рдЖрдкрдХреЗ OS рдкрд░ рдЗрд╕рдХреЗ рдмрд░рд╛рдмрд░) $Home/.composer/vendor/bin рддрд╛рдХрд┐ Laravel рдХрдорд╛рдВрдб рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХрд╛рдо рдХрд░реЗред

рддреЛ, рдПрдХ рдЕрдЪреНрдЫреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ TOR рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдЖрдЗрдП рд╣рдорд╛рд░реЗ рд╕рд░рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:



рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдЙрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдПрд▓реНрдмрдореЛрдВ рдореЗрдВ рд╕рд╛рдЗрдЯ рдкрд░ рдлрд╝реЛрдЯреЛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИред рд╡рд╣ рдкрдВрдЬреАрдХрд░рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд▓реЙрдЧ рдЗрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ MySQL рд╣реИред рд▓реЗрдЖрдЙрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╡рд╣ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рд╣реИ, рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд▓реЗрдЖрдЙрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВред

рдирд┐рд░реНрдорд╛рдг рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдЖрдк рдЬреЛ рдкрд╣рд▓реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЬреЛрдбрд╝ рд░рд╣реА рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрднреА рднреА рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛ рд╣реИ рдХрд┐ рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдВ, рддреЛ рдИрд╡рд┐рд▓ рдХреЙрд░реНрдкреЛрд░реЗрд╢рди рд╕реЗ рддреИрдпрд╛рд░ рдбреЗрд╕реНрдХрдЯреЙрдк рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ : рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ ред рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред

рддреЛ, рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реИред рд╣рдо рдЖрдкрдХреА рдкрд╕рдВрджреАрджрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ

 laravel new gallery 

рдЖрдЧреЗ рдЖрдкрдХреЛ рд╣рдорд╛рд░рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, MySQL рд╢рд╛рдЦрд╛ рдореЗрдВ рдЬрд╛рдПрдВ рдФрд░ рдПрдХ рдирдпрд╛ рдЧреИрд▓рд░реА рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдПрдВ (рд░реВрд╕реА рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП utf-8, рдФрд░ fation to utf_general_ci рдХреЛ рдХреИрд░реЗрдХреНрдЯрд░ рд╕реЗрдЯ рд╕реЗрдЯ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ)ред



рдЕрдЧрд▓рд╛, .ENV рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдПрдХ рд╕рдорд╛рди рдХрдиреЗрдХреНрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ, рдЪрд░ рдХреЛ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рд░рдЦреЗрдВ:

 DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=gallery DB_USERNAME=pavel DB_PASSWORD= 

рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред

 php artisan migrate 

рдпрджрд┐ рдЖрдкрдиреЗ рдЕрдкрдирд╛ рдХрдиреЗрдХреНрд╢рди .ENV рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо t / z рдкрд░ рд╕рд╣рдордд рд╣реБрдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рд╛рдзрд┐рдХрд░рдг, рдкрдВрдЬреАрдХрд░рдг рдХреА рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛрдЧреА, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрд▓реНрдмрдо рдмрдирд╛рдиреЗ рдФрд░ рд╡рд╣рд╛рдВ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рднреА рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред рд╕рднреА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдПрд▓реНрдмрдо рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВ

рддреЛ рдмреИрдХреЗрдВрдб рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ? рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдиреЗ рд╕реЗред рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдпрд╣ рдХрдорд╛рдВрдб рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдмрдирд╛рдПрдЧреА:

 php artisan make:migration CreateAlbumsTable 

рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХреМрди рд╕реЗ рдХреЙрд▓рдо рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдЕрдВрддрд┐рдо рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЗ рдХрд╛рд░рдг рдмрдирд╛рдпрд╛ рдерд╛ред рдпрд╣ gallery/database/migrations рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдирд╛рдо рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

 <?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateAlbumsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('albums', function(Blueprint $table) { $table->increments('id')->unsigned(); $table->string('name'); //   $table->text('description'); //    $table->string('cover_image'); //   $table->timestamps(); //  .   ,     }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('albums'); } } 

рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛

  php artisan migrate 

рдЕрдм MySQL рдмреНрд░рд╛рдВрдЪ рдореЗрдВ рдЖрдкрдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЯреИрдм рдирд┐рдореНрди рд░реВрдк рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:



рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдЕрдкрдирд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдпрд╛, рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдПрд▓реЛрдХреЗрди рдореЙрдбрд▓ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░реЗрдЧрд╛ред

рдПрдХ рдПрд▓реНрдмрдо рдореЙрдбрд▓ рдмрдирд╛рдПрдБ




рдЕрдм рд╣рдореЗрдВ рдПрд▓реЛрдХреНрд╡реЗрдВрдЯ рдУрдЖрд░рдПрдо рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдпрджрд┐ рдЖрдк рдпрд╣ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдПрдХ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдЗрддрдиреА рдЬрд▓реНрджреА рдХреИрд╕реЗ рдЪрд▓реЗ рдЧрдП, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдП ред рд╣рдо рдореЙрдбрд▓ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реА рдХрд╛рд░реАрдЧрд░ рд╕рд╣рд╛рдпрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:


php рдХрд╛рд░реАрдЧрд░ рдмрдирд╛рддреЗ рд╣реИрдВ: рдореЙрдбрд▓ рдПрд▓реНрдмрдо

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо gallery/app/Album.php рдФрд░ рдЗрд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:

 <?php namespace App; use Illuminate\Database\Eloquent\Model; class Album extends Model { protected $table = 'albums'; protected $fillable = array('name','description','cover_image'); public function Photos(){ return $this->hasMany('App\Image'); } } 

рдЫрд╡рд┐рдпрд╛рдБ рддрд╛рд▓рд┐рдХрд╛

рд╡рд╛рд╣! рд╣рдорд╛рд░рд╛ рдПрд▓реНрдмрдо рдореЙрдбрд▓ рддреИрдпрд╛рд░ рд╣реИ, рдЕрдм рдЖрдк рд╣рдорд╛рд░реА рдЫрд╡рд┐рдпрд╛рдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:

 php artisan make:migration CreateImagesTable 

рд╣рдо рдЕрдкрдирд╛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ:

 <?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateImagesTable extends Migration { public function up() { Schema::create('images', function (Blueprint $table) { $table->increments('id'); $table->integer('album_id')->unsigned(); $table->string('image'); $table->string('description'); $table->foreign('album_id')->references('id')->on('albums')->onDelete('CASCADE')->onUpdate('CASCADE'); $table->timestamps(); }); } public function down() { Schema::dropIfExists('images'); } } 

рдФрд░ рдлрд┐рд░ рд╕реЗ рд╣рдо рдкреНрд░рд╡рд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ:

 php artisan migrate 

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдкреНрд░рд╡рд╛рд╕ рдПрдХ рд╕рдлрд▓рддрд╛ рд╣реИ! рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдореЗрдВ рдПрдХ рдФрд░ рдмрд╛рдд рд╕рдордЭрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реЛрдЧрд╛: рд╣рдордиреЗ рджреЛ рдЯреЗрдмрд▓ рдПрд▓реНрдмрдо рдФрд░ рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП foreign рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред рдкреНрд░рддреНрдпреЗрдХ рдПрд▓реНрдмрдо рдХреА рдЕрдкрдиреА рдЫрд╡рд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрд▓реНрдмрдо рдХреЛ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╢рд╛рдпрдж рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдлрд╝реЛрдЯреЛ рднреА рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред

рдЫрд╡рд┐ рдореЙрдбрд▓

рдпрд╣ рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдЬреЛ рдЫрд╡рд┐рдпреЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд▓реЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ:

 php artisan make:model Image 

рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдЗрд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП gallery/app/Image.php рдЬрд╛рдПрдВред
рдпрд╣рд╛рдБ рднреА, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

 class Image extends Model { protected $table = 'images'; // ,      protected $fillable = array('album_id','description','image'); // } 

рд╣рдорд╛рд░рд╛ рдЗрдореЗрдЬ рдореЙрдбрд▓ рддреИрдпрд╛рд░ рд╣реИред рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрд▓реНрдмрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдПрд▓реНрдмрдо рдирд┐рд░реНрдорд╛рдг

рд╣рдорд╛рд░реЗ рдПрд▓реНрдмрдо рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ, рджрд┐рдЦрд╛рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рд╕реНрд╡рдпрдВ рдирд┐рдпрдВрддреНрд░рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 php artisan make:controller AlbumsController 

gallery/app/Http/Controllers/AlbumsController.php

 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\MessageBag; use Validator; use App\Album; class AlbumsController extends Controller { public function getList() //   { $albums = Album::with('Photos')->get(); return view('index')->with('albums',$albums); } public function getAlbum($id) { $album = Album::with('Photos')->find($id); $albums = Album::with('Photos')->get(); return view('album', ['album'=>$album, 'albums'=>$albums]); } public function getForm() { return view('createalbum'); //   } public function postCreate(Request $request) { $rules = ['name' => 'required', 'cover_image'=>'required|image']; //        $input = ['name' => null]; //      $validator = Validator::make($request->all(), $rules); if($validator->fails()){ return redirect()->route('create_album_form')->withErrors($validator)->withInput(); } $file = $request->file('cover_image'); $random_name = str_random(8); $destinationPath = 'albums/'; $extension = $file->getClientOriginalExtension(); $filename=$random_name.'_cover.'.$extension; $uploadSuccess = $request->file('cover_image')->move($destinationPath, $filename); $album = Album::create(array( 'name' => $request->get('name'), 'description' => $request->get('description'), 'cover_image' => $filename, )); return redirect()->route('show_album',['id'=>$album->id]); } public function getDelete($id) //    { $album = Album::find($id); $album->delete(); return Redirect::route('index'); } } 

рдлрд┐рд░ рд╣рдореЗрдВ рдЕрдкрдиреЗ рд░рд╛рд╕реНрддреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЬреЛ рд▓реЛрдЧ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдЧ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджрд┐рдЦрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рд░реНрдЧ рдФрд░ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рд╣рдо web.php рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ:

 <?php //  Route::get('/', array('as' => 'index','uses' => 'AlbumsController@getList')); //      Route::get('/createalbum', array('as' => 'create_album_form','uses' => 'AlbumsController@getForm')); //    Route::post('/createalbum', array('as' => 'create_album','uses' => 'AlbumsController@postCreate')); //   Route::get('/deletealbum/{id}', array('as' => 'delete_album','uses' => 'AlbumsController@getDelete')); //   Route::get('/album/{id}', array('as' => 'show_album','uses' => 'AlbumsController@getAlbum')); //   //       Route::get('/addimage/{id}', array('as' => 'add_image','uses' => 'ImageController@getForm')); //    Route::post('/addimage', array('as' => 'add_image_to_album','uses' => 'ImageController@postAdd')); //     Route::get('/deleteimage/{id}', array('as' => 'delete_image','uses' => 'ImageController@getDelete')); // Route::post('/moveimage', array('as' => 'move_image', 'uses' => 'ImageController@postMove')); 

рд╡рд╛рд╣ред рдкреИрд╕рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ gallery/config/app.php рдХреЗ рдЕрдВрдд рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓реЗрдмрд▓ (рдЙрд░реНрдл) рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд▓рд┐рдВрдХ рд╣реИрдВред рдпреЗ рдХреЗрд╡рд▓ рддрдХрдиреАрдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВ:

 'aliases' => [ 'App' => Illuminate\Support\Facades\App::class, 'Artisan' => Illuminate\Support\Facades\Artisan::class, 'Auth' => Illuminate\Support\Facades\Auth::class, 'Blade' => Illuminate\Support\Facades\Blade::class, 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, 'Bus' => Illuminate\Support\Facades\Bus::class, 'Cache' => Illuminate\Support\Facades\Cache::class, 'Config' => Illuminate\Support\Facades\Config::class, 'Cookie' => Illuminate\Support\Facades\Cookie::class, 'Crypt' => Illuminate\Support\Facades\Crypt::class, 'DB' => Illuminate\Support\Facades\DB::class, 'Eloquent' => Illuminate\Database\Eloquent\Model::class, 'Event' => Illuminate\Support\Facades\Event::class, 'File' => Illuminate\Support\Facades\File::class, 'Gate' => Illuminate\Support\Facades\Gate::class, 'Hash' => Illuminate\Support\Facades\Hash::class, 'Lang' => Illuminate\Support\Facades\Lang::class, 'Log' => Illuminate\Support\Facades\Log::class, 'Mail' => Illuminate\Support\Facades\Mail::class, 'Notification' => Illuminate\Support\Facades\Notification::class, 'Password' => Illuminate\Support\Facades\Password::class, 'Queue' => Illuminate\Support\Facades\Queue::class, 'Redirect' => Illuminate\Support\Facades\Redirect::class, 'Redis' => Illuminate\Support\Facades\Redis::class, 'Request' => Illuminate\Support\Facades\Request::class, 'Response' => Illuminate\Support\Facades\Response::class, 'Route' => Illuminate\Support\Facades\Route::class, 'Schema' => Illuminate\Support\Facades\Schema::class, 'Session' => Illuminate\Support\Facades\Session::class, 'Storage' => Illuminate\Support\Facades\Storage::class, 'URL' => Illuminate\Support\Facades\URL::class, 'Validator' => Illuminate\Support\Facades\Validator::class, 'View' => Illuminate\Support\Facades\View::class, 'Form' => Collective\Html\FormFacade::class, 'Html' => Collective\Html\HtmlFacade::class, ], //   FORM     ) 
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ! gallery/resources/views рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдЬрд╛рдПрдВред рдЖрдк welcome.blade.php рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред index.blade.php рдмрдирд╛рдПрдВ рдФрд░ view рдХреЗ рджреЛрд╣рд░рд╛рдП рдЧрдП рднрд╛рдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрдлрд╝реЛрд▓реНрдбрд░ includes ред рддреЛ, рд╣рдорд╛рд░реЗ index.blade.php рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлреЙрд░реНрдо рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП:

 @include('includes.header') <body> @include('includes.nav') <div class="container"> <div class="starter-template"> <div class="row"> @foreach($albums as $album) <div class="col-lg-3"> <div class="thumbnail" style="min-height: 514px;"> <img alt="{{$album->name}}" src="/albums/{{$album->cover_image}}"> <div class="caption"> <h3>{{$album->name}}</h3> <p>{{$album->description}}</p> <p>{{count($album->Photos)}} image(s).</p> <p>Created date: {{ date("d FY",strtotime($album->created_at)) }} at {{date("g:ha",strtotime($album->created_at)) }}</p> <p><a href="{{route('show_album', ['id'=>$album->id])}}" class="btn btn-big btn-default"> </a></p> </div> </div> </div> @endforeach </div> </div><!-- /.container --> </div> </body> </html> 

рд╕рд╛рдордЧреНрд░реА рдореЗрдВ includes/header.blade.php ред

 <!doctype html> <html lang="ru"> <head> <meta charset="UTF-8"> <title> </title> <link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0-rc1/css/bootstrap.min.css" rel="stylesheet"> <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0-rc1/js/bootstrap.min.js"></script> <style> body { padding-top: 50px; } .starter-template { padding: 40px 15px; text-align: center; } </style> </head> 
рд╕рд╛рдордЧреНрд░реА рдореЗрдВ includes/nav.blade.php :

 <div class="navbar navbar-inverse navbar-fixed-top"> <div class="container"> <button type="button" class="navbar-toggle"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="navbar-brand" href="/"> </a> <div class="nav-collapse collapse"> <ul class="nav navbar-nav"> <li><a href="{{URL::route('create_album_form')}}">  </a></li> </ul> </div><!--/.nav-collapse --> </div> </div> 

рдЖрдЬ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реА! рдпрд╣, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХрд╛ рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж, рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ view рдкреВрд░рдХ рд╣реЛрдВрдЧреЗ рдФрд░ рдЫрд╡рд┐ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдореБрджреНрджреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред

рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ:

рд░реВрд╕реА рдореЗрдВ рдкреНрд░рд▓реЗрдЦрди
рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧреА рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдЬреЛ рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдмреЗрд╣рддрд░ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдмреНрд▓реЗрдб рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреА рд╡рд┐рд░рд╛рд╕рдд рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ
рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг

Source: https://habr.com/ru/post/hi471776/


All Articles