рд╣рд╛рдп, рд╣реИрдмреНрд░ред рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореБрдЭреЗ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдорд┐рд▓реА, рдЬрд┐рд╕рдиреЗ рдЕрдкрдиреА рд╕рд╛рджрдЧреА рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдХрд┐рд╕реА рднреА рдврд╛рдВрдЪреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рдорд╛рдВрдЧ рдХреАред рдкреИрдХреЗрдЬ рдХреА рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рдереА, рдЗрд╕рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд▓рд╛рд░рд╡реЗрд▓ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрджрд┐ рдЖрдкрдХреЛ рдХрддрд╛рд░реЛрдВ, рдПрд▓реЛрдХреНрд╡реЗрдВрдЯ рдпрд╛ рдПрдХ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдмрд┐рд▓реНрд▓реА рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред
рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рд╕рд╛рджрдЧреА рдкрд░
рд▓рд╛рд░рд╡реЗрд▓ 4 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рд╕рднреА рдШрдЯрдХ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рд╣реИрдВ, рдЬреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рднреА PHP рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдШрдЯрдХреЛрдВ рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрдХреВрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдореБрдЦреНрдп рдврд╛рдВрдЪреЗ рдореЗрдВ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдЫрд┐рдкрд╛ рд╣реБрдЖ рд╣реИред
рдШрдЯрдХреЛрдВ
рдкрд╛рддреНрд░
рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рд╕рднреА рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реЗ, illuminate/container
рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИред
<?php use Illuminate\Container\Container; $container = Container::getInstance(); return $container->make(Foo::class);
рд╣рд╛рд▓рд╛рдБрдХрд┐, Container
рдкрд░ рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред app()
рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЬреЛ рд╡реИрд╢реНрд╡рд┐рдХ рдХрдВрдЯреЗрдирд░ рдЙрджрд╛рд╣рд░рдг рд╣рдореЗрдВ рд▓реМрдЯрд╛рдПрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдРрд╕реЗ рд╕рд╣рд╛рдпрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ helpers.php
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ, рдФрд░ рдЗрд╕реЗ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред
"autoload": { "files": [ "src/helpers.php" ], "psr-4": { "YourApp\\": "src/" } }
рдлрд╝рд╛рдЗрд▓ рдореЗрдВ app()
рд╕рд╣рд╛рдпрдХ рдЬреЛрдбрд╝реЗрдВред
<?php use Illuminate\Container\Container; if (! function_exists('app')) { function app($abstract = null, array $parameters = []) { if (is_null($abstract)) { return Container::getInstance(); } return Container::getInstance()->make($abstract, $parameters); } }
рд╣реЛ рдЧрдпрд╛ред рдЖрдк рдПрдХ рд╕рд╣рд╛рдпрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
<?php return app(Foo::class);
рдХреНрд╡реЗрд░реА рдмрд┐рд▓реНрдбрд░ рдФрд░ рдПрд▓реЛрдХреЗрдВрдЯ
illuminate/database
рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо Capsule\Manager
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдПрдХ рд╡рд░реНрдЧ рдЬрд┐рд╕реЗ рд▓рд╛рд░рд╛рд╡реЗрд▓ рдХреЗ рдмрд╛рд╣рд░ рдХреНрд╡реЗрд░реА рдмрд┐рд▓реНрдбрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЪрд▓реЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред autoload.php
. autoload.php
рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдЪрд░рдг рдореЗрдВ рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИред
<?php require_once __DIR__.'/../vendor/autoload.php'; use Illuminate\Database\Capsule\Manager; $manager = new Manager; $manager->addConnection([ 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'database', 'username' => 'root', 'password' => 'password', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ]);
рдЖрдк рдХреНрд╡реЗрд░реА рдмрд┐рд▓реНрдбрд░ рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
<?php use Illuminate\Database\Capsule\Manager; return Manager::table('orders')->get();
рдПрд▓реЛрдХреЗрдВрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
<?php namespace YourApp\Models; use Illuminate\Database\Eloquent\Model; class Order extends Model { protected $fillable = [ 'name', ]; }
<?php use YourApp\Models\Order; Order::first();
рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ - рдПрдХ рддрд░рдл, рдХрд┐рдЯ рдореЗрдВ рд╕реНрдХреАрдорд╛ рдмрд┐рд▓реНрдбрд░ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдкрд▓рд╛рдпрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рддрдВрддреНрд░ рдирд╣реАрдВ рд╣реИред
<?php use Illuminate\Database\Capsule\Manager; Manager::schema()->create('orders', function ($table) { $table->bigIncrements('id'); $table->string('name'); $table->timestamps(); });
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: php migration.php
рдХрддрд╛рд░реЛрдВ
рдХрддрд╛рд░реЛрдВ рдХреЗ рдЕрдкрдиреЗ Capsule
рднреА рд╣реЛрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, queue:work
рдХреЗ рдПрдирд╛рд▓реЙрдЧреНрд╕ queue:work
рдФрд░ queue:listen
рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦреЗ рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПред
Application
рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд▓рд╛рд░рд╡реЗрд▓ рдореЗрдВ, рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдХрдВрдЯреЗрдирд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ Illuminate\Container\Container
рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдлреНрд░реЗрдорд╡рд░реНрдХ (рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг, рднрдВрдбрд╛рд░рдг рдкрде, рд╕рдВрд╕рд╛рдзрди) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рдзрд┐ рд╣реЛрдЧреА - isDownForMaintenance
ред рдпрд╣ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЖрд╡реЗрджрди рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
<?php namespace YourApp; use Illuminate\Container\Container; class Application extends Container { public function isDownForMaintenance() { return false; } }
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ illuminate/events
рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ Illuminate\Contracts\Events\Dispatcher
рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдХреЛ рдЕрдиреНрдп рдЙрдкрдирд╛рдо рд╕реЗ рдмрд╛рдВрдзреЗрдВред
<?php use YourApp\Application; use Illuminate\Contracts\Events\Dispatcher; $application = Application::getInstance(); $application->bind(Dispatcher::class, 'events');
рдЕрдм рдЖрдкрдХреЛ Capsule
рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдФрд░ рд╡рд╣рд╛рдВ рдХрдиреЗрдХреНрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЬреЛрдбрд╝реЗрдВред
рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
<?php use YourApp\Application; use Illuminate\Queue\Capsule\Manager; use Illuminate\Database\Capsule\Manager as DB; use Illuminate\Database\ConnectionResolver; $container = Application::getInstance(); $queue = new Manager($container); $queue->addConnection([ 'driver' => 'database', 'table' => 'jobs', 'connection' => 'default', 'queue' => 'default', ], 'default');
Redis рдХреЗ рд▓рд┐рдП рд╡рд┐рдиреНрдпрд╛рд╕ рдЙрджрд╛рд╣рд░рдг ( illuminate/redis
рдЖрд╡рд╢реНрдпрдХрддрд╛ illuminate/redis
)
<?php use Illuminate\Redis\RedisManager; use Illuminate\Queue\Capsule\Manager; $container->bind('redis', function () use ($container) { return new RedisManager($container, 'predis', [ 'default' => [ 'host' => '127.0.0.1', 'password' => null, 'port' => 6379, 'database' => 0, ] ]); }); $queue = new Manager($container); $queue->addConnection([ 'driver' => 'redis', 'connection' => 'default', 'queue' => 'default', ], 'default'); $queue->setAsGlobal();
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдЕрдВрддрд┐рдо рдЪрд░рдг рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рдирд╛ рд╣реИред
<?php use Illuminate\Contracts\Debug\ExceptionHandler; class Handler implements ExceptionHandler { public function report(Exception $e) {
рдХрддрд╛рд░ рд╡рд┐рдиреНрдпрд╛рд╕ рдкреВрд░рд╛ рд╣реБрдЖред рдЕрдм рдЖрдк queue:work
рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ queue:work
ред
<?php require_once __DIR__.'/bootstrap/bootstrap.php'; use Illuminate\Queue\Worker; use Illuminate\Queue\Capsule\Manager; use Illuminate\Queue\WorkerOptions; $queueManager = Manager::getQueueManager(); $worker = new Worker($queueManager, app('events'), app('exception.handler')); $worker->daemon('default', 'default', new WorkerOptions);
рдЕрдм рдПрдХ рдХрддрд╛рд░ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ php worker.php
рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд▓рд┐рдЦреЗрдВред php worker.php
ред
рдпрджрд┐ queue:listen
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ queue:listen
, рддреЛ рдЖрдкрдХреЛ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХ рдПрдХ рдбреЗрдорди рд╣реИ рдЬреЛ рдХрддрд╛рд░ рдХреЛ рд╕реБрдирддрд╛ рд╣реИ рдФрд░ рд╣рд░ рдирдИ рдиреМрдХрд░реА рдкрд░ рдПрдХ рджреВрд╕рд░реА рдлрд╛рдЗрд▓ рдЪрд▓рд╛рддрд╛ рд╣реИред рджреВрд╕рд░реА рдлрд╝рд╛рдЗрд▓, рдмрджрд▓реЗ рдореЗрдВ, рдХрд╛рд░реНрдп рдХреЗ рдирд┐рд╖реНрдкрд╛рджрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИред
worker.php
<?php require_once __DIR__.'/bootstrap/bootstrap.php'; use Illuminate\Queue\Listener; use Illuminate\Queue\ListenerOptions;
work.php
<?php require_once 'bootstrap/bootstrap.php'; use Illuminate\Queue\Worker; use Illuminate\Queue\WorkerOptions; use Illuminate\Queue\Capsule\Manager; $queueManager = Manager::getQueueManager(); $worker = new Worker($queueManager, app('events'), app('exception.handler')); $worker->runNextJob('default', 'default', new WorkerOptions);
рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреБрдЬрд░рддреЗ рд╣реИрдВред рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рдПрдкреАрдЖрдИ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
<?php use Illuminate\Queue\Capsule\Manager; Manager::push(SomeJob::class);