рдЕрдкрдиреЗ рджреЛ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ
рдбрд┐рдкреЗрдВрдбреЗрдВрд╕реА рдЗрдВрдЬреЗрдХреНрд╢рди рдФрд░
рдЖрдИрдУрд╕реА рдХрдВрдЯреЗрдирд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереА, рдФрд░ рд╡реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд▓рд╛рд░рд╡реЗрд▓ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдкреЛрд╕реНрдЯ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ DI рдФрд░ IoC рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реЛрдЧреАред рдФрд░ рдпрд╣ рднреА, рдХрд┐ рдЖрд╡реЗрджрди рдореЗрдВ рдЗрди рджреЛ рдЕрджреНрднреБрдд рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рдкреИрдЯрд░реНрди рдХреЗ рд╕рднреА рд╕рдорд╛рди рд▓рд╛рдн рд╣рдореЗрдВ рдХреНрдпрд╛ рджреЗрддреЗ рд╣реИрдВред
рдкрд░рд┐рдЪрдп
рд╣рдорд╛рд░рд╛ рдХрд╛рдо рдПрд╕рдПрдордПрд╕ рднреЗрдЬрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╣реИред рд╣рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рджрд╛рддрд╛ (рдЧреЗрдЯ) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛ рд▓рд┐рдЦ тАЛтАЛрд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдкреНрд░рджрд╛рддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдЦреА рдЧрдИ рдХрдХреНрд╖рд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдмрддрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдПрд╕рдПрдордПрд╕ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛, рдкрд╣рд▓рд╛ рд╡рд┐рдЪрд╛рд░ рдПрдХ рдШрдЯрдХ рд▓рд┐рдЦрдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдореЗрдВ рд╣рдо рдлрд┐рд░ рдПрд╕рдПрдордПрд╕ рднреЗрдЬрдиреЗ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдЕрдм рдЖрдЗрдП рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдмрд┐рдирд╛ рдкреНрд░рджрд╛рддрд╛рдУрдВ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рдФрд░ рдПрдХ рдкреНрд░рджрд╛рддрд╛ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдЬрд▓реНрджреА рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рдмрд┐рдирд╛ред
рдЗрд╕ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрд╕рдПрдордПрд╕ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдПрд╕рдПрдордПрд╕ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдЖрдкрдХреЗ рдкреБрд░рд╛рдиреЗ рдореЙрдирд┐рдЯрд░ рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдФрд░ рдПрдХ рдирдпрд╛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдпрд╛ рдХреАрдмреЛрд░реНрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрдж рд░рд╣рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЗрд╕ рдШрдЯрдХ рдХреЛ рдПрдХ рднреМрддрд┐рдХ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦреЗрдВред рд╡реИрд╕реЗ рднреА, рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рддрд░рд╣ рдХрд╛ рдХрдВрдкреНрдпреВрдЯрд░ (рдХрдВрдкреЛрдиреЗрдВрдЯ рдбрд┐рд╡рд╛рдЗрд╕) рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдХ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд▓реЗрдЧреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдкрд░, рдЖрдк рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдПрд╕рдПрдордПрд╕ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдореИрдВ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ `app \ Acme \ Sms` рдФрд░ рд╕рдВрдЧреАрддрдХрд╛рд░ .json рдореЗрдВ
PSR-0 рдХреЗ рддрд╣рдд рд░рдЬрд┐рд╕реНрдЯрд░:
"psr-0": { "Acme": "app" }
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╕рднреА рдПрд╕рдПрдордПрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рдЙрди рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВрдЧреЗ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
<?php namespace Acme\Sms; interface SmsGateInterface { public function send(SmsRecipient $recipient, $text); }
рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреЗрд╡рд▓ 1 рднреЗрдЬрдиреЗ рдХреА рд╡рд┐рдзрд┐ рдЪрд╛рд╣рд┐рдП, рдЬреЛ SMS рднреЗрдЬреЗрдЧрд╛ред `SmsRecipient` рд╡рд░реНрдЧ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ:
<?php namespace Acme\Sms; class SmsRecipient { public $phone; }
рд╕рдВрдЧреАрддрдХрд╛рд░ рдореЗрдВ SmsOnline рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ:
"require": { "laravel/framework": "4.0.*", "kkamkou/sms-online-api": "dev-master" }
рдЕрдм рд╣рдореЗрдВ рдЗрд╕ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреНрд░рд╛рдЗрд╡рд░ рд▓рд┐рдЦрдиреЗ рдФрд░ рдЙрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рд╣реИ:
<?php namespace Acme\Sms; use SmsOnline\Api as SmsOnlineApi; class SmsOnlineGate implements SmsGateInterface { private $api; public function __construct(SmsOnlineApi $api) { $this->api = $api; } public function send(SmsRecipient $recipient, $text) { $this->api->send($recipient->phone, $text); } }
рд▓реЗрдХрд┐рди `SmsOnline \ Api 'рд╡рд░реНрдЧ рдХреЗ DI рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ `SmsOnline \ Api 'рд╡рд░реНрдЧ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдПрд╕рдПрдордПрд╕ рдШрдЯрдХ (`рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди / sms.php`) рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ, рдФрд░ рдЙрд╕реА рд╕рдордп рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдбреНрд░рд╛рдЗрд╡рд░` SmsOnlineGate` рдбрд╛рд▓реЗрдВ:
<?php return [ 'default' => 'Acme\Sms\SmsOnlineGate', 'drivers' => [ 'Acme\Sms\SmsOnlineGate' => [ 'user' => '', 'secret_key' => '', ], ], ];
рдЕрдм рдпрд╣ IoC рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ `app / bindings.php`, рдЬрд╣рд╛рдБ рд╣рдо IoC рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВрдЧреЗ:
<?php $smsConfig = Config::get('sms'); $smsGate = $smsConfig['default']; App::bind('Acme\Sms\SmsGateInterface', $smsGate);
рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдПрд╕рдПрдордПрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдИрдУрд╕реА рдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рдЖрд╡реЗрджрди `SmsGateInterface` рдЪрд╛рд╣рддрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ` SmsOnlineGate` рджреЗрдВред рд╡реИрд╕реЗ, рдпрджрд┐ рдЖрдк рд╕рдВрд╕реНрдХрд░рдг 5.5 рд╕реЗ рдкрд╣рд▓реЗ рд╣реА PHP рд╣реИрдВ, рддреЛ рдореИрдВ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ:
app / config / sms.php
<?php use Acme\Sms\SmsOnlineGate; return [ 'default' => SmsOnlineGate::class, 'drivers' => [ SmsOnlineGate::class => [ 'user' => '', 'secret_key' => '', ], ], ];
app / bindings.php
<?php use Acme\Sms\SmsGateInterface; $smsConfig = Config::get('sms'); $smsGate = $smsConfig['default']; App::bind(SmsGateInterface::class, $smsGate);
рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ IDE, рдмрджрд▓реЗ рдореЗрдВ, рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдРрдк / bindings.php рдХреЛ рдЬреЛрдбрд╝рдХрд░ `SmsOnline \ Api` рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
<?php use Acme\Sms\SmsGateInterface; use Acme\Sms\SmsOnlineGate;
рдЕрдм рдЬрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ `SmsOnline \ Api` - рдпрд╣ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред
рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдбреНрд░рд╛рдЗрд╡рд░ рд▓рд┐рдЦрдиреЗ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рд╣рдо рдкреНрд░рджрд╛рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрд╕рдПрдордПрд╕ рдирд╣реАрдВ рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрд╣реАрдВ рднреА рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЛ рдПрдХ рд╣реА рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ `DatabaseSmsGate` рдФрд░` FileSmsGate` рд▓рд┐рдЦреЗрдВрдЧреЗред рдпрд╣ рд╕рдмрд╕реЗ "рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ рднрд╛рдЧ" рдкрд░ рдЬрд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ - рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ред
рдкрд░реАрдХреНрд╖рдг
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдбреАрдЖрдИ рдореЗрдВ рдореБрдЦреНрдп рдкреНрд▓рд╕ рд╣реИ: рдкреВрд░реНрдг рдЕрд▓рдЧрд╛рд╡ рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкрд░реАрдХреНрд╖рдгред рдХрд╛рдо рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЪреВрд╕рдиреЗ рдХреЗ рдмрдЬрд╛рдп - рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЖрдк рд╕реНрдЯрдм рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдореЙрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд░рдо рдореЗрдВ n рдмрд╛рд░ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдКрдкрд░ рд▓рд┐рдЦреЗ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдкрд╣рд▓реЗ рдореБрдЭреЗ
phpunit рдФрд░
mockery рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдВрдЧреАрддрдХрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреА рдбрд╛рд▓рд╛:
"require-dev": { "phpunit/phpunit": "3.8.*@dev", "mockery/mockery": "dev-master" }
рдкреНрд░рддреНрдпреЗрдХ рдХрдХреНрд╖рд╛ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди, рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рдкреВрд░реЗ рдЕрд▓рдЧрд╛рд╡ рдореЗрдВ рдЪрд▓рд╛рдП рдЬрд╛рдПрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЖрдк SmsOnlineGate рд╡рд░реНрдЧ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреА рднреЗрдЬрдиреЗ рдХреА рд╡рд┐рдзрд┐ SmsOnlineApi рдХреЗ рднреЗрдЬрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдХрд╣рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣реА рд╣реИ, рдЖрдк рдХреЗрд╡рд▓ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ `SmsOnlineApi` рдХреА` рд╕реЗрдВрдб` рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдореЙрдХ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:
<?php use Acme\Sms\SmsOnlineGate; use Acme\Sms\SmsRecipient; class SmsOnlineGateTest extends TestCase { private $api; private $gate; private $recipient; public function setUp() { parent::setUp(); $this->api = Mockery::mock(SmsOnline\Api::class)->makePartial(); $this->recipient = Mockery::mock(SmsRecipient::class); $this->gate = new SmsOnlineGate($this->api); } public function test_send() { $text = ' '; $this->api->shouldReceive('send') ->withArgs([$this->recipient->phone, $text]) ->once(); $this->gate->send($this->recipient, $text); } }
рдкрд░реАрдХреНрд╖рдг рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ `SmsOnline \ Api` рдореЗрдВ рднреЗрдЬрдиреЗ рдХреА рд╡рд┐рдзрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╛рд░ рдХреЙрд▓ рдХреА рдЧрдИ рдереАред рджрд░рдЕрд╕рд▓, рдЗрд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╣рдорд╛рд░реА рдореЙрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдореЙрдХрд░реА рдиреЗ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдорджрдж рдХреАред
рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдЖрд╡реЗрджрди `SmsGateInterface` рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ IoC рд╣рдореЗрдВ` SmsOnlineGate` рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рд╣реИ:
<?php use Acme\Sms\SmsGateInterface; use Acme\Sms\SmsOnlineGate; class SmsGateTest extends TestCase { public function test_instance() { $instance = App::make(SmsGateInterface::class); $this->assertInstanceOf(SmsOnlineGate::class, $instance); } }
рд╡рд╣ рд╕рдм рдореИрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдпрд╣рд╛рдБ рдореИрдВрдиреЗ
ServiceProvider рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
IoC рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЬреЛ рдХрд┐ рдЕрдзрд┐рдХ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рд╣реИред
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдПрд╕рдПрдордПрд╕ рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рдШрдЯрдХ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреАрдЖрдИ рдФрд░ рдЖрдИрдУрд╕реА рдХреЗ рд▓рд╛рднреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдирд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд┐рд╕реНрддреГрдд рдХрд┐рдпрд╛ рд╣реИред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╡рд┐рдХрд╛рд╕ рдордЬрд╝реЗрджрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЖрдкрдХреЛ рдПрдХ рдХрд▓рд╛рдХрд╛рд░ рдХреА рддрд░рд╣ рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рддрдВрддреНрд░ рдЦреАрдВрдЪрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рднреА рдкреНрд░рд╢реНрди рд╣реИрдВ - рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдкреВрдЫреЗрдВ, рддреЛ рдореБрдЭреЗ рдЙрдиреНрд╣реЗрдВ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред
рдЙрдкрдпреЛрдЧреА рд╕рд╛рд╣рд┐рддреНрдп рдХреА рд╕реВрдЪреА: