Slide 1

Slide 1 text

犥 Laravel 妿涢樄咳 Hyperf 䛑አ — 舰肜֚ (Shengyou Fan) PHP 犖磪 Day #51 2019/12/17

Slide 2

Slide 2 text

ࡣ牦 — ౯ฎ • Developer Advocate • Backend Developer • Open Source Community Organizer TEAM

Slide 3

Slide 3 text

౯㮉᮷眢 Laravel牧䌘މ牫

Slide 4

Slide 4 text

傶Ջ讕蝡讕̴ 牫 — 绐ਧጱๅ碝 ਠ碉ጱۑ胼 䔶य़ጱኞ眲 猻聅ጱ承ဩ >

Slide 5

Slide 5 text

֕ 聅অጱԪᇔฎᥝ՞ڊդ㰷ጱ…

Slide 6

Slide 6 text

໛礍硳胼矎ᤈག — https://www.techempower.com/benchmarks/

Slide 7

Slide 7 text

໛礍硳胼矎ᤈག — https://github.com/kenjis/php-framework-benchmark

Slide 8

Slide 8 text

դ㰷ጱ胙盅ฎՋ讕牫

Slide 9

Slide 9 text

PHP 䁆ᤈ蝰๗ — https://www.slideshare.net/chtalbert/the-integration-of-laravel-with-swoole https://www.youtube.com/watch?v=wTrUOWuJBl0

Slide 10

Slide 10 text

Laravel 䁆ᤈ蝰๗ — https://www.slideshare.net/chtalbert/the-integration-of-laravel-with-swoole https://www.youtube.com/watch?v=wTrUOWuJBl0

Slide 11

Slide 11 text

㻌㮆 Request 襑ᥝ斉獈 ጱ䲆礯碍ᰁ — count(get_included_files()); 331 㮆䲆礯

Slide 12

Slide 12 text

ᮎ㮆ἓิጱ匍䋿 — 戔懯䒍ጱἓิݗጮ

Slide 13

Slide 13 text

ᮎ㮆犋ਂࣁጱԻ褸 —

Slide 14

Slide 14 text

櫞螇疰䷱磪薹ဩ㻟牫

Slide 15

Slide 15 text

苭Ԫ苭ᇔ C ݢ薹 —

Slide 16

Slide 16 text

Swoole 肜ط — https://www.swoole.com/

Slide 17

Slide 17 text

Hyperf ໛礍 — https://hyperf.io/

Slide 18

Slide 18 text

Hyperf 箛ێ疻纈 ࢧ㯽 JSON ਁԀ — Hyperf Laravel

Slide 19

Slide 19 text

Hyperf 箛ێ疻纈 虻碘䓚蝫娄穰 — Hyperf Laravel

Slide 20

Slide 20 text

൉䥮 QPS ጱ笴ێ 憙眐हݢ胼磪… — 60~1200狝

Slide 21

Slide 21 text

ಅ犥牧氎఺Ӟ手㻟牫 —

Slide 22

Slide 22 text

纈塅戔ਧ — አ̴̴ ጱ脲蔽 樄咳秇ୗ 犥 Todo 傶塅ֺ MVC

Slide 23

Slide 23 text

絑ह襑穩 — PHP Composer Extension • Swoole >= 4.4 • OpenSSL • JSON • PDO • PHP >= 7.2

Slide 24

Slide 24 text

絑ह礍戔 — ๜秚礍戔 Vagrant Docker Homestead • macOS: Homebrew • Windows: WSL • Linux: apt hyperf/hyperf:7.2-alpine-cli

Slide 25

Slide 25 text

䌕礯ୌ缏 — // hyperf $ composer create-project hyperf/hyperf-skeleton // laravel $ composer create-project laravel/laravel \ --prefer-dist ݶ物 • ᮷ฎֵአ composer 瞲犤 吖物 • package ጱݷ圸犋ݶ • ग़ԧ԰㵕㺔ᒼ螡殻

Slide 26

Slide 26 text

Route — // hyperf Router::get('...', function () { return '...'; }); Router::get('...', [Controller::class, '...']); // laravel Route::get('...', function () { return '...'; }); Route::get('...', [Controller::class, '...']); ݶ物 • 承ဩ奾䯤觊犲 吖物 • Class ݷ圸犋ݶ • ䷱磪 Laravel 蝡讕ग़箸ದ

Slide 27

Slide 27 text

CLI Tool — // hyperf $ php bin/hyperf.php command [options] [arguments] // laravel $ php artisan command [options] [arguments] ݶ物 • ᮷ฎ䟖አ Symfony Console 吖物 • Command ݷ圸犋ݶ • ֖ᗝ犋ݶ • 犋ฎ 100% ጱ瞲犤᮷磪ᑏ༙

Slide 28

Slide 28 text

Controller — // hyperf $ php bin/hyperf.php gen:controller TaskController declare(strict_types=1); class TaskController extends AbstractController { public function index() { // ... } } // laravel $ php artisan make:controller TaskController class TaskController extends Controller { public function index() { // ... } } ݶ物 • 皃ԒӞ䰬 吖物 • 䟖አ PHP 7 ጱ承ဩ

Slide 29

Slide 29 text

View Packages — // view component $ composer require hyperf/view // blade engine $ composer require duncan3dc/blade // task component $ composer require hyperf/task

Slide 30

Slide 30 text

Setup View Component — // config/autoload/view.php return [ 'engine' => BladeEngine::class, 'mode' => Mode::TASK, 'config' => [ 'view_path' => BASE_PATH.'/storage/view/', 'cache_path' => BASE_PATH.'/runtime/view/', ], ];

Slide 31

Slide 31 text

Setup Task Component — // config/autoload/server.php return [ // ... 'settings' => [ // ... 'task_worker_num' => 8, 'task_enable_coroutine' => false, ], 'callbacks' => [ SwooleEvent::ON_TASK => [ TaskCallback::class, 'onTask' ], SwooleEvent::ON_FINISH => [ FinishCallback::class, 'onFinish' ], ], ];

Slide 32

Slide 32 text

Serve Assets — // config/autoload/server.php return [ // ... 'settings' => [ // ... 'document_root' => BASE_PATH.'/public', 'static_handler_locations' => ['/'], 'enable_static_handler' => true, ], ]; 吖物 • Laravel 犋蒂ቘ assets

Slide 33

Slide 33 text

Views — // app/Controller/*Controller.php public function index(RenderInterface $render) { // ... return $render->render('...', []); } ݶ物 • ᮷ݢ犥አ Blade 吖物 • ๅ䕃௔ጱ䰬礂螡殻 • 襑ᥝग़蕕 Task زկ

Slide 34

Slide 34 text

Migration — // hyperf $ php bin/hyperf.php gen:migration migration_name // laravel $ php artisan make:migration migration_name class Create...Table extends Migration { public function up(): void { Schema::create('.', function (Blueprint $table) { $table->bigIncrements('id'); // ... $table->timestamps(); }); } public function down(): void { Schema::dropIfExists('...'); } } ݶ物 • 皃ԒӞ䰬 吖物 • 䲆礯硯ᗝ֖ᗝ犋ݶ

Slide 35

Slide 35 text

Model — // hyperf $ php bin/hyperf.php gen:model Name // laravel $ php artisan make:model Name class Task extends Model { protected $table = '...'; protected $fillable = [...]; protected $casts = [...]; } ݶ物 • 皃Ԓ蚤 Eloquent Ӟ䰬 吖物 • 毆戔叨ኞጱ䰬礂犚盏癩吖

Slide 36

Slide 36 text

Seeder — // hyperf $ php bin/hyperf.php gen:seeder TableSeeder $ php bin/hyperf.php db:seed // laravel $ php artisan make:seeder TableSeeder $ php artisan db:seed class TableSeeder extends Seeder { public function run() { // ... } } ݶ物 • 皃ԒӞ䰬 吖物 • ䷱磪 DatabaseSeeder ጱ戔懯 • 䲆ݷ䙼ֺ犋ݶ • 䲆礯硯ᗝ֖ᗝ犋ݶ

Slide 37

Slide 37 text

Request & Response — // hyperf public function store( RequestInterface $request, ResponseInterface $response ) { return $response->redirect('...'); return $response->json([ ... ]); } // laravel public function index(Request $request) { return redirect('...'); return response()->json([ ... ]); } ݶ物 • 禊盢觊犲 吖物 • 襑ᥝဳ獈ጱزկ犋ݶ

Slide 38

Slide 38 text

CRUD — // read Model::all(); // create Model::create([ ... ]); // update $task = Model::find($id); $task->update([ ... ]); // delete $task = Model::find($id); $task->delete(); ݶ物 • Ӟ䰬

Slide 39

Slide 39 text

ࢧ觎 — • PHP ጱ螀ᤈ粬௔ • Laravel ጱ硳胼絵毮 • Swoole 现 Hyperf ጱݢ胼薹ဩ • Hyperf 墋Օ现硳胼箛ێ疻纈 • አ૪妿䨝ጱ Laravel 妿涢旉ᑏک Hyperf

Slide 40

Slide 40 text

玱௏ — • አ PHP 疰ฎ眸牫篷ဩ蒂ቘय़窕ᰁ๐率牫 • Swoole ฎӞ獥硳胼㺔氂ጱ薹ᒼ牫 • ℂกॠ蚏疰᪡བ Hyperf牫 • ᮎک皈傶Ջ讕ᥝ፡ Hyperf牫

Slide 41

Slide 41 text

㷢ᘍ虻碘 — Swoole 盏抓纷 Hyperf ෈կ Hyperf ਥ翕 Hyperf च器抓

Slide 42

Slide 42 text

๜෭塅ֺ — 塅ֺ纷ୗ嘨物 https://github.com/shengyou/hyperf-mvc-introduction

Slide 43

Slide 43 text

̴䛑አ 舰肜֚ (Shengyou) [email protected] Q&A — 犥̴ 妿涢樄咳