рд╕рдореБрджрд╛рдп рдореЗрдВ рдЪрд░реНрдЪрд╛рдУрдВ рдХреЗ рдмреАрдЪ, рдореИрдВ рдЕрдХреНрд╕рд░ рдпрд╣ рд░рд╛рдп рд╕реБрдирддрд╛ рд╣реВрдВ рдХрд┐ рд▓рд╛рд░рд╡реЗрд▓ рдореЗрдВ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдЧрд▓рдд, рдЬрдЯрд┐рд▓ рд╣реИ, рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╕реНрд╡рдпрдВ рд▓рдВрдмреЗ рд╣реИрдВ рдФрд░ рдХреЛрдИ рд▓рд╛рдн рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдХреБрдЫ рд▓реЛрдЧ рдЗрди рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдлреАрдЪрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ 0 рддрдХ рдЬрд╛рддрд╛ рд╣реИред
рдореИрдВрдиреЗ рднреА рдПрдХ рдмрд╛рд░ рдРрд╕рд╛ рд╕реЛрдЪрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдПрдХ рдмрд╛рд░ рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдФрд░ рдЦреБрдж рд╕реЗ рдкреВрдЫрд╛ - рд╢рд╛рдпрдж рдореИрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдЦрд╛рдирд╛ рдмрдирд╛рдирд╛ рд╣реИ?
рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдореИрдВ рд╕рдордЭ рдЧрдпрд╛ рдФрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░ рдореБрдЭреЗ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдирдИ рд╕рдордЭ рдереА, рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╕реНрдкрд╖реНрдЯ, рдЕрдиреБрдХреВрд▓, рддреЗрдЬ рд╣реЛ рдЧрдП рдФрд░ рдореЗрд░реА рдорджрдж рдХрд░рдиреЗ рд▓рдЧреЗред
рдореИрдВ рд╕рдореБрджрд╛рдп рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рд╕рдордЭ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдФрд░ рдмреЗрд╣рддрд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВред
рджрд░реНрд╢рди рдФрд░ рд╕реАрдорд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рд╛
рд▓рд╛рд░рд╡реЗрд▓ рдХреБрдЫ рдЬрдЧрд╣реЛрдВ рдкрд░ рдПрдХ рддрд░рд╣ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рд╣реИред рдЦрд╛рд╕рддреМрд░ рдкрд░ facades рдФрд░ Eloquent рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВред рдореИрдВ рдЗрди рдмрд┐рдВрджреБрдУрдВ рдХреА рдЪрд░реНрдЪрд╛ рдпрд╛ рдирд┐рдВрджрд╛ рдкрд░ рдирд╣реАрдВ рдЫреВрдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рддрд╛ рд╣реВрдВред
рдореИрдВ рдореБрдЦреНрдп рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж (рдпрд╛ рдЙрд╕реА рд╕рдордп) рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрддрд╛ рд╣реВрдВред рд╢рд╛рдпрдж рдореЗрд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЯреАрдбреАрдбреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдпрд╛ рдЖрдВрд╢рд┐рдХ рд╕рдорд╛рдпреЛрдЬрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдЯреЗрд╕реНрдЯ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореИрдВ рдЦреБрдж рд╕реЗ рдЬреЛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рд╡рд╛рд▓ рдкреВрдЫрддрд╛ рд╣реВрдВ, рд╡рд╣ рд╣реИ "рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ?" рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореБрджреНрджрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдерд╛ рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдкрд░ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдкрд░ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред
рдЯреЗрд╕реНрдЯ рд╕реНрдерд┐рд░ рдФрд░ рдиреНрдпреВрдирддрдо рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐, рдЬрдм рдЖрдк рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЗ рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЕрдЪреНрдЫреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрджрд┐ рд╡реЗ рдирд╣реАрдВ рдЧрд┐рд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рд╕рдВрднрд╡рддрдГ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рдирд╣реАрдВ рд╣реИрдВред
рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░, рд▓рд╛рд░рд╡реЗрд▓ 3 рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:
- рдмреНрд░рд╛рдЙрдЬрд╝рд░
- рдлрд╝реАрдЪрд░
- рдЗрдХрд╛рдИ
рдореИрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред
рдореИрдВ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рднреА рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ (рд╢рд╛рдпрдж рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ)ред рдореИрдВ рдХреБрдЫ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░рддрд╛ (рдЕрдзрд┐рдХ рдЗрд╕ рдкрд░ рдиреАрдЪреЗ)ред
рдпрджрд┐ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдореВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдВрд╕реВ рдкрд░ Mockery :: close () рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред
рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг "рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рд▓рд┐рдП рдЧрдП рд╣реИрдВред"
рдореИрдВ рдкрд░реАрдХреНрд╖рд╛ рдХреИрд╕реЗ рджреВрдВ?
рдиреАрдЪреЗ рдореИрдВ рд╕рдореВрд╣ рд╕рдореВрд╣ рджреНрд╡рд╛рд░рд╛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реВрдБрдЧрд╛ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг рджреЗрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдБрдЧрд╛ред рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд░реНрдЧ рд╕рдореВрд╣реЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕реНрд╡рдпрдВ рдХреЛрдб рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджреВрдВрдЧрд╛ред
middleware
рдорд┐рдбрд┐рд▓рд╡реЗрдпрд░ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдиреБрд░реЛрдз рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реВрдВ, рд╡рд╛рдВрдЫрд┐рдд рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ, рдлрд┐рд░ рдореИрдВ рд╣реИрдВрдбрд▓ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдПрд╕реНрдХреЙрд░реНрдЯреНрд╕ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ 3 рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рдмрджрд▓рддреА рдЕрдиреБрд░реЛрдз рд╡рд╕реНрддреБ (рд╢рд░реАрд░ рдХрд╛ рдЕрдиреБрд░реЛрдз, рдпрд╛ рд╕рддреНрд░ рдмрджрд▓рдирд╛)
- рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдмрджрд▓рдирд╛)
- рдЕрдиреБрд░реЛрдз рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдирд╣реАрдВ рдХрд░рдирд╛
рдЖрдЗрдП рдкреНрд░рддреНрдпреЗрдХ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрди рдорд┐рдбрд┐рд▓рд╡реЗрдпрд░ рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рдХрд╛рд░реНрдп рд╢реАрд░реНрд╖рдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реИ:
class TitlecaseMiddleware { public function handle($request, Closure $next) { if ($request->title) { $request->merge([ 'title' => title_case($request->title) ]); } return $next($request); } }
рдПрдХ рд╕рдорд╛рди рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
public function testChangeTitleToTitlecase() { $request = new Request; $request->merge([ 'title' => 'Title is in mixed CASE' ]); $middleware = new TitlecaseMiddleware; $middleware->handle($request, function ($req) { $this->assertEquals('Title Is In Mixed Case', $req->title); }); }
рд╕рдореВрд╣ 2 рдФрд░ 3 рдХреЗ рд▓рд┐рдП рдЯреЗрд╕реНрдЯ рдХреНрд░рдорд╢рдГ рдЗрд╕ рддрд░рд╣ рдХреА рдпреЛрдЬрдирд╛ рдХреЗ рд╣реЛрдВрдЧреЗ:
$response = $middleware->handle($request, function () {}); $this->assertEquals($response->getStatusCode(), 302);
рдЕрдиреБрд░реЛрдз рд╡рд░реНрдЧ
рдЗрд╕ рд╡рд░реНрдЧ рд╕рдореВрд╣ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╕рддреНрдпрд╛рдкрди рд╣реИред
рдореИрдВ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрди рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд░рддрд╛ (рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ), рдХреЗрд╡рд▓ рдлреАрдЪрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЗрди рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдирд┐рд░рд░реНрдердХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓реЗ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдЕрдиреБрд░реЛрдз рдЗрдХрд╛рдИ рдХрдХреНрд╖рд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рд╢рд╛рдпрдж рд╡реЗ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдВрдЧреЗ:
рдирд┐рдпрдВрддреНрд░рдХ
рдореИрдВ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдЙрдирдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп, рдореИрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред
рдирд┐рдпрдВрддреНрд░рдХреЛрдВ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╣рд▓реНрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдирдХрд╛ рдХрд╛рд░реНрдп рд╕рд╣реА рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ, рдЖрд╡рд╢реНрдпрдХ рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИ (рдЪреВрдВрдХрд┐ рдпреЗ рджреЛрдиреЛрдВ рдкрдж рд▓рд╛рд░рд╡реЗрд▓ рдХреЗ рд▓рд┐рдП "рд╡рд┐рджреЗрд╢реА" рд╣реИрдВ, рдореИрдВ рдиреАрдЪреЗ рдЕрдкрдиреА рд╢рдмреНрджрд╛рд╡рд▓реА рд╕рдордЭрд╛рдКрдВрдЧрд╛), рдЙрддреНрддрд░ рд▓реМрдЯрд╛рдПрдВред рдХрднреА-рдХрднреА рдХрд┐рд╕реА рдШрдЯрдирд╛, рдиреМрдХрд░реА рдЖрджрд┐ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗрдВред
рддрджрдиреБрд╕рд╛рд░, рдЬрдм рд╕реБрд╡рд┐рдзрд╛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рди рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдФрд░ рдЙрддреНрддрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЖрд╡рд╢реНрдпрдХ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рднреА рд▓реЙрдХ рдХрд░реЗрдВ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (рдпрд╛ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ)ред рдХрднреА-рдХрднреА - рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рддреЗ рд╣реИрдВред
рд╕реЗрд╡рд╛ рд╡рд░реНрдЧ рдореЙрдХ рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдХ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
public function testProductCategorySync() { $service = Mockery::mock(\App\Services\Product::class); app()->instance(\App\Services\Product::class, $service); $service->shouldReceive('sync')->once(); $response = $this->post('/api/v1/sync/eventsCallback', [ "eventType" => "PRODUCT_SYNC" ]); $response->assertStatus(200); }
рдПрдХ рдореБрдЦреМрдЯрд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдирд┐рдпрдВрддреНрд░рдХ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдШрдЯрдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рдЕрдиреНрдп рд▓рд╛рд░рд╡реЗрд▓ facades рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ):
public function testChangeCart() { Event::fake(); $user = factory(User::class)->create(); Passport::actingAs( $user ); $response = $this->post('/api/v1/cart/update', [ 'products' => [ [
рд╕реЗрд╡рд╛ рдФрд░ рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдХрдХреНрд╖рд╛рдПрдВ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИрдВред рдореИрдВ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЛ рдкрддрд▓рд╛ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рдХрдХреНрд╖рд╛ рд╕рдореВрд╣ рдореЗрдВ рд╕рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рдо рдХрд┐рдПред
рдореИрдВрдиреЗ рдЙрдирдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛:
- рдЕрдЧрд░ рдореБрдЭреЗ рдХреБрдЫ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╕реЗрд╡рд╛ рдкрд░рдд (рд╡рд░реНрдЧ) рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ред
- рдЕрдиреНрдп рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╡рд░реНрдЧ рд╕рдореВрд╣ рдореЗрдВ рд░рдЦрд╛ред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдПрд▓реЛрдХреЗрдВрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╡рд╣рд╛рдВ рдЬрд╛рддрд╛ рд╣реИред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рднрдВрдбрд╛рд░ рд╕реНрддрд░ рдХреА рд╕рд╣реА рдкрд░рд┐рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВрдиреЗ рдпрд╣ рднреА рд╕реБрдирд╛ рдХрд┐ рдХреБрдЫ рдореЙрдбрд▓ рдореЗрдВ рдПрд▓реЛрдХреЗрдВрдЯ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдм рдХреБрдЫ рд╕рд╣рди рдХрд░рддреЗ рд╣реИрдВред рдореЗрд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдордЭреМрддрд╛ рд╣реИ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ "рдЕрдХрд╛рджрдорд┐рдХ" рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдЪ рдирд╣реАрдВ рд╣реИред
рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд▓рдЧрднрдЧ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рд▓рд┐рдЦрддрд╛ рд╣реВрдВред
рд╕реЗрд╡рд╛ рд╡рд░реНрдЧ рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг рдиреАрдЪреЗ:
public function testUpdateCart() { Event::fake(); $cartService = resolve(CartService::class); $cartRepo = resolve(CartRepository::class); $user = factory(User::class)->make(); $cart = $cartRepo->getCart($user);
рдШрдЯрдирд╛-рд╢реНрд░реЛрддрд╛, рдиреМрдХрд░рд┐рдпрд╛рдВ
рдЗрди рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рд▓рдЧрднрдЧ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╣рдо рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ; рд╣рдо рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рд╡рд░реНрдЧ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред
рд╢реНрд░реЛрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг:
public function testHandle() { $user = factory(User::class)->create(); $cart = Cart::create([ 'userId' => $user->id,
рд╕рд╛рдВрддреНрд╡рдирд╛ рд╕рд╛рдВрддреНрд╡рдирд╛
рдореИрдВ рдХрдВрд╕реЛрд▓ рдХрдорд╛рдВрдбреНрд╕ рдХреЛ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдЬреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдбреЗрдЯрд╛ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрдВрд╕реЛрд▓ рдЗрдирдкреБрдЯ-рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХрд░рддреЗ рд╣реИрдВред рддрджрдиреБрд╕рд╛рд░, рдкрд░реАрдХреНрд╖рдг рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ: рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЖрд╡рд╢реНрдпрдХ рд╕реЗрд╡рд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╛ рдирд╣реАрдВ), рдФрд░ рд╣рдо рдХрдВрд╕реЛрд▓ (рдЖрдЙрдЯрдкреБрдЯ рдпрд╛ рдбреЗрдЯрд╛ рдЕрдиреБрд░реЛрдз) рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреА рднреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред
рдПрдХ рд╕рдорд╛рди рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
public function testSendCartSyncDataEmptyJobs() { $service = m::mock(CartJobsRepository::class); app()->instance(CartJobsRepository::class, $service); $service->shouldReceive('getAll') ->once()->andReturn(collect([])); $this->artisan('sync:cart') ->expectsOutput('Get all jobs for sending...') ->expectsOutput('All count for sending: 0') ->expectsOutput('Empty jobs') ->assertExitCode(0); }
рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░реЗрдВ
рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдпрджрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕реЗрд╡рд╛ рдкрд░рдд рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╕реНрд╡рдпрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рд╛рде рдХрд╡рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдХреЗрд╡рд▓ рдЕрдЧрд░ рдЖрдк рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдкреАрдЖрд░ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ) рдФрд░ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдХрд╛ рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕ рдорд╛рдирдирд╛ тАЛтАЛрдЪрд╛рд╣рд┐рдПред
рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░, рдореБрдЭреЗ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреА рд╣реЛрдЧреАред рд▓рд╛рд░рд╡реЗрд▓ рдЕрдХреНрд╕рд░ рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЧрдЬрд╝рд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдиреЗрдЯрд╡рд░реНрдХрд╕реЗрд╡рд╛ рд╕реЗрд╡рд╛ рдХреЗ рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдореЗрдВ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рдХрд╛рдо рдХрд░рдирд╛ рдореБрдЭреЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд▓рдЧрд╛ред рдЗрд╕рд╕реЗ рдореБрдЭреЗ рдореБрдЦреНрдп рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛, рдФрд░ рдЙрддреНрддрд░ рдФрд░ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реАред
рдореИрдВ рдЕрдкрдиреЗ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗрд╡рд╛ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдХрдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реВрдВ:
public function testSuccessfulSendNetworkService() { $mockHandler = new MockHandler([ new Response(200), ]); $handler = HandlerStack::create($mockHandler); $client = new Client(['handler' => $handler]); app()->instance(\GuzzleHttp\Client::class, $client); $networkService = resolve(NetworkService::class); $response = $networkService->sendRequestToSite('GET', '/'); $this->assertEquals('200', $response->getStatusCode()); } public function testUnsupportedMethodSendNetworkService() { $networkService = resolve(NetworkService::class); $this->expectException('\InvalidArgumentException'); $networkService->sendRequestToSite('PUT', '/'); } public function testUnsetConfigUrlNetworkService() { $networkService = resolve(NetworkService::class); Config::shouldReceive('get') ->once() ->with('app.api_url') ->andReturn(''); Config::shouldReceive('get') ->once() ->with('app.api_token') ->andReturn('token'); $this->expectException('\InvalidArgumentException'); $networkService->sendRequestToApi('GET', '/'); }
рдирд┐рд╖реНрдХрд░реНрд╖
рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореБрдЭреЗ рдмреЗрд╣рддрд░ рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп SOLID рдФрд░ SRP рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рддреЗрдЬрд╝ рд╣реЛ рдЧрдП, рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд - рд╡реЗ рдореБрдЭреЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рд▓рдЧреЗред
рд╕рдХреНрд░рд┐рдпрддрд╛ рдХреЗ рд╕рд╛рде рдЬрдм рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдпрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо рддреБрд░рдВрдд рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЧрд┐рд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╣рдо рд╕реНрдерд╛рдиреАрдп рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рдореБрдХреНрдд рдХрд┐рдП рдмрд┐рдирд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЬрд▓реНрджреА рдФрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рддреНрд░реБрдЯрд┐ рд╕реБрдзрд╛рд░ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд╕реНрддрд╛ рдмрдирд╛рддрд╛ рд╣реИред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╕рд┐рджреНрдзрд╛рдВрдд рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рд▓рд╛рд░рд╡реЗрд▓ рдореЗрдВ рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрдХрд╛рдИ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЕрдкрдиреЗ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрдХрд╛рдИ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВрдЧреЗред
рдЕрдкрдиреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдФрд░ рдЯрд┐рдкреНрдкрдгреА рд▓рд┐рдЦреЗрдВред