76
¬³是 2016/09/22 主ǘǯ Shengyou Fan PHP Day #28

Composer 從入門到實戰

Embed Size (px)

Citation preview

Page 1: Composer 從入門到實戰

2016/09/22

主 'Shengyou'Fan

PHP' 'Day'#28

Page 2: Composer 從入門到實戰

Composer 是PHP Day #28

https://youtu.be/1cABv5Ou0oE

http://www.slideshare.net/shengyou/

composerJfromscratch

https://github.com/laravelJdojo/

20160922JphpJtheJdayJdemo

Page 3: Composer 從入門到實戰

Composer 是PHP Day #28

{'''''"name":'"shengyou/self>introduction",'''''"description":'" 還增",'''''"authors":'['''''''''{'''''''''''''"name":'"主 '(Shengyou'Fan)",'''''''''''''"email":'"[email protected]",'''''''''''''"homepage":'"http://www.shengyoufan.com",'''''''''''''"company":'" 覺 '(The'Qwan)",'''''''''''''"role":'[" 兩 ",'"Laravel' ⼀一以"]'''''''''}'''''],'''''"support":'{'''''''''"facebook":'"http://fb.me/shengyoufan",'''''''''"twitter":'"@shengyou"'''''}'}

Page 4: Composer 從入門到實戰

Composer 是PHP Day #28

只•

• Composer

• Composer

• Composer 啊• 不•

Page 5: Composer 從入門到實戰

Page 6: Composer 從入門到實戰

Composer 是PHP Day #28

PHP

三只

HTTP⾝身

要成會

index.php

posts.php

inc/

libs/

出 ⼼心 再

A

B

classes/

bootstrap.php

那 URL php 再

Page 7: Composer 從入門到實戰

Composer 是PHP Day #28

include 實//' 'lib1' 'Class'include'__DIR__'.'"/libs/lib1/Class.php";'

//'lib1' 那 'lib2' 'lib3'include'__DIR__'.'"/libs/lib2/Class.php";'include'__DIR__'.'"/libs/lib3/Class.php";'

//'lib2' 那 'lib4'include'__DIR__'.'"/libs/lib4/Class.php";'

//'lib3' 那 'lib999'include'__DIR__'.'"/libs/lib999/Class.php";

Page 8: Composer 從入門到實戰

Composer 是PHP Day #28

多 new 多 ⾯面

//' 'Class'$class'='new'MyClass();'

//' 'Class' 然'PHP'Fatal'error:''Class''MyClass''not'found'in'scripts.php'on'line'x

Page 9: Composer 從入門到實戰

Composer 是PHP Day #28

那 都libs/

A

B

C

E E

話情

D D

Av.2v.1

Page 10: Composer 從入門到實戰

Composer 是PHP Day #28

Composer • 點• 嗎 那都• 第• 於最•

Page 11: Composer 從入門到實戰

Composer因 ⼒力 情

Page 12: Composer 從入門到實戰

Composer 是PHP Day #28

composer.phar再

+ +

git果

php 5.3.2(openssl extension)

Page 13: Composer 從入門到實戰

Composer 是PHP Day #28

*nix 發php'>r'"copy('https://getcomposer.org/installer',''composer>setup.php');"'php'>r'"..."'php'composer>setup.php'php'>r'"unlink('composer>setup.php');"

installer' 不 發 太 'Composer' 樣能 樣 網 'composer.phar'

mv'composer.phar'/usr/local/bin/composer'composer' 不 想學

https://getcomposer.org/download/'

Page 14: Composer 從入門到實戰

Composer 是PHP Day #28

Windows 發• 中 Composer 起 for Windows

• 那 起 看 能同看 Composer 那 PHP網 起 php.exe

道網 PHP 道 起 ⼼心

https://getcomposer.org/Composer>Setup.exe

Page 15: Composer 從入門到實戰

Composer 是PHP Day #28

wagon 已• wagon Laravel 享 PHP/Laravel 發

網 去 Cmder因Composer因git AMP網 wagon網家 wagon Cmder

已 Composer

P.S'wagon' 去 'cmder'發 中 'Composer'發不 網 今 不 ⼼心

http://www.laravel>dojo.com/opensource/wagon Laravel wagon與

Page 16: Composer 從入門到實戰

Composer 是PHP Day #28

再• Composer PHAR 再 (PHP archive)網感 PHP Runtime 有 ( )

• composer.phar 道 成會 網想學 與

$'php'composer.phar'[command]

Page 17: Composer 從入門到實戰

Composer 是PHP Day #28

• 想學著增 網 想學與$'[php]'composer[.phar]'[>>version]

Page 18: Composer 從入門到實戰

Composer 是PHP Day #28

Composer• 上 Composer網 bug-

fix$'[php]'composer[.phar]'self>update

Page 19: Composer 從入門到實戰

Composer 是PHP Day #28

PHP • HTTP PHP CLI PHP

個 CLI PHP 個 CLI PHP 定$'php'>v $'php'>r'"echo'PHP_BINARY;"

Page 20: Composer 從入門到實戰

Composer 是PHP Day #28

次 extension• HTTP CLI php.ini

個 CLI PHP php.ini ⼼心

$'php'>>ini

個 CLI extension

$'php'>m

Page 21: Composer 從入門到實戰

Composer 是PHP Day #28

XDebug 今下• Composer XDebug

alias 過 XDebug

alias'composer='php'>n'/usr/local/bin/composer'⽣生 網 都 做 ^.<

Page 22: Composer 從入門到實戰

ComposerComposer 啊 ⼼心

Page 23: Composer 從入門到實戰

Composer 是PHP Day #28

Composer • 為 成會

• Composer

$'cd'~/Code/{MyProject}

$'composer'init(那 給 'composer.json)

Page 24: Composer 從入門到實戰

Composer 是PHP Day #28

{'''''"name":'"{vendor/package}",'''''"type":'"project",'''''"license":'"proprietary",'''''"authors":'['''''''''{'''''''''''''"name":'"{author'name}",'''''''''''''"email":'"{author'email}"'''''''''}'''''],'''''"minimum>stability":'"stable",'''''"require":'{'''''''''"{vendor/package}":'"{version}"'''''},'''''"autoload":'{}'}

Composer ⼼心 再

Page 25: Composer 從入門到實戰

Composer 是PHP Day #28

時⼈人• PHP 都 與Packagist.org

• PHP ⽤用 網 ⾃自說 因 那

/ 說P.S Composer Packagist

Page 26: Composer 從入門到實戰

Composer 是PHP Day #28

$'composer'require'{vendor}/{project}'$'composer'install

Page 27: Composer 從入門到實戰

Composer 是PHP Day #28

$'composer'update

Page 28: Composer 從入門到實戰

Composer 是PHP Day #28

⼼心

<?php'

require'__DIR__.'/vendor/autoload.php';

多 'require

Page 29: Composer 從入門到實戰

Composer 是PHP Day #28

多 網 …

Page 30: Composer 從入門到實戰

Composer 是PHP Day #28

X Y ZMajorBreaks

MinorFeatures

PatchFixes

. .

Page 31: Composer 從入門到實戰

Composer 是PHP Day #28

0.1.0 0.2.0 1.0.1 1.1.0

0.1.1 1.0.0 1.0.2 2.0.0

'享

享 '

'

'享

'

'

'

'

Page 32: Composer 從入門到實戰

Composer 是PHP Day #28

Version Constraints

Exact Match 1.2.3 1.2.3

Wildcard Range 1.0.* >=1.0 <1.1

Hyphen Range 1.0 - 2.0 >=1.0.0 <2.1

Tilde Operator ~1.2 >=1.2 <2.0

Caret Operator ^1.2.3^0.3

>=1.2.3 <2.0>=0.3.0 <0.4.0

Stability Flags @stable@dev

dev > alpha > beta > RC > stable⼼心種 stable網 @ 想

Page 33: Composer 從入門到實戰

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

^與 ^嗎 Composer 網 上 中 Copmposer

Page 34: Composer 從入門到實戰

Composer 是PHP Day #28

所多 得• 網 composer'require

• 樣 composer.json 網 composer'validate

• 情這 網太 ⽂文 dev-master 的 * ( 全 在 裡 Packagist )

• ⼿手 把 SemVer ⾏行 ( 享 很 把)

• 樣 所多 樂 網 中Packagist Semver Checker 多

Page 35: Composer 從入門到實戰

Composer 是PHP Day #28

json 再 lock 再!?年 commit VCS

Page 36: Composer 從入門到實戰

Composer 是PHP Day #28

• composer.json

- 那 ⼼心• composer.lock

- 知• vendor

- 起

Page 37: Composer 從入門到實戰

Composer 是PHP Day #28

(lock'再 )

After'installing'the'dependencies,'Composer'writes'the'list'of'the'exact'versions'it'installed'into'a'composer.lock'file.

This'locks'the'project'to'those'specific'versions.

Page 38: Composer 從入門到實戰

Composer 是PHP Day #28

VCS

update install

json V.S lock

Page 39: Composer 從入門到實戰

Composer 是PHP Day #28

/vendor'/node_modules'composer.phar

.gitignore

Page 40: Composer 從入門到實戰

(Jordi' 'lock'再 果 )

Page 41: Composer 從入門到實戰

Composer 是PHP Day #28

install 的 update想學 歡 網 …

Page 42: Composer 從入門到實戰

Composer 是PHP Day #28

1. 'composer.lock' 太最 '2. 最 網 'composer'update' '3.最 網那 'lock' 'package'

$'[php]'composer[.phar]'install

Page 43: Composer 從入門到實戰

Composer 是PHP Day #28

1. 'composer.json'再'2. ⼼心 網作 ''3. 作 'packages'4. 'composer.lock

$'[php]'composer[.phar]'update

Page 44: Composer 從入門到實戰

Composer 是PHP Day #28

• $'composer'install

- (git'clone) 網那

• $'composer'update

- composer.json

-

( composer.lock 再)

( 那快沒後第 )

Page 45: Composer 從入門到實戰

不多 起

Page 46: Composer 從入門到實戰

Composer 是PHP Day #28

能⾏行• 能⾏行 與

- 錯 (recca0120/laravel>tracy)

- 發 (vlucas/phpdotenv)

- 說對 都 (robmorgan/phinx)

- 可說對 (fzaninotto/faker)

- (nesbot/carbon)

Page 47: Composer 從入門到實戰

Composer 是PHP Day #28

錯$'composer'require'recca0120/laravel>tracy

• 起 給• 起 多 等如 網 全 ⽅方 好

• print_r()因var_dump() 發 ⼦子

• 說對 sql 新 情

Page 48: Composer 從入門到實戰

Composer 是PHP Day #28

use'Recca0120\LaravelTracy\Tracy;'

Tracy::instance();'

//'sql'log'helper'function'sql($sql)'{'' $tracy'='Tracy::instance();'' $databasePanel'='$tracy>>getPanel('database');'' $databasePanel>>logQuery($sql);'}

Page 49: Composer 從入門到實戰

Composer 是PHP Day #28

發$'composer'require'vlucas/phpdotenv

• 說 多 起• 都 不 網 說都 都

• 起 網 ⼼心 說

Page 50: Composer 從入門到實戰

Composer 是PHP Day #28

//'bootstrap.php'use'Dotenv\Dotenv;'

$dotenv'='new'Dotenv(__DIR__);'$dotenv>>load();'

include'__DIR__.'/inc/database.php';'

//'inc/database.php'define('DB_HOST','getenv('DB_HOST'));'define('DB_PORT','getenv('DB_PORT'));'//'...

Page 51: Composer 從入門到實戰

Composer 是PHP Day #28

說對 都$'composer'require'robmorgan/phinx

• 起 都 網 說對• 網 說對• 看 說對 本• 說對 也也

Page 52: Composer 從入門到實戰

Composer 是PHP Day #28

//'init'phinx'$'vendor/bin/phinx'init'.'

//'edit'phinx.yml'environments:'''''development:'''''''''adapter:'mysql'''''''''host:'127.0.0.1'''''''''//'...'

//'create'folders'$'mkdir'>p'db/migrations'db/seeds

Page 53: Composer 從入門到實戰

Composer 是PHP Day #28

//'create'migration'class'$'vendor/bin/phinx'create'CreatePostsTable'

//'write'migration'script'$table'='$this>>table('posts');'$table>>addColumn('title',''string')'' >>addColumn('content',''text')'' >>addColumn('created_at',''timestamp')'' >>addColumn('updated_at',''timestamp')'' >>create();'

//'run'migrate'$'vendor/bin/phinx'migrate

Page 54: Composer 從入門到實戰

Composer 是PHP Day #28

//'create'seeder'class'$'vendor/bin/phinx'seed:create'PostSeeder'

//'truncate'table'first'$this>>execute('TRUNCATE'TABLE'posts');'

//'generate'seeding'data'$data'='[...];'

$posts'='$this>>table('posts');'$posts>>insert($data)'' >>save();'

//'run'seeding'$'vendor/bin/phinx'seed:run

Page 55: Composer 從入門到實戰

Composer 是PHP Day #28

可說對$'composer'require'fzaninotto/faker

• 多 說對 起 網每 說對 aaa因xxx因asdf 我 說對

• 剛 因 無 說對• 網 可 說對

Page 56: Composer 從入門到實戰

Composer 是PHP Day #28

use'Faker\Factory'as'Faker;'

//'init'faker'$faker'='Faker::create('zh_TW');'

//'generate'seeding'data'$data[]'='['' 'title''''=>'$faker>>realText(10),'' 'content''=>'$faker>>realText(500),'];

Page 57: Composer 從入門到實戰

Composer 是PHP Day #28

$'composer'require'nesbot/carbon

• date() 不著 去•

• 真真• 新

Page 58: Composer 從入門到實戰

Composer 是PHP Day #28

use'Carbon\Carbon;'

//'generate'seeding'data'$data[]'='['' 'title'''''''=>'$faker>>realText(10),'' 'content'''''=>'$faker>>realText(500),'' 'created_at''=>'Carbon::now()'' ' ' ' ' ' >>subDays($total'>'$index),'' 'updated_at''=>'Carbon::now()'' ' ' ' ' ' >>subDays($total'>'$index)'' ' ' ' ' ' >>addHours(rand(1,'24)),'];

Page 59: Composer 從入門到實戰
Page 60: Composer 從入門到實戰

Composer 是PHP Day #28

{'''''"autoload":'{'''''''''"psr>4":'{...},'''''''''"classmap":'[...],'''''''''"files":'[...]'''''},'''''"autoload>dev":'{'''''''''"psr>4":'{...},'''''''''"classmap":'[...],'''''''''"files":'[...]'''''},'}

$'vim'composer.json

Page 61: Composer 從入門到實戰

Composer 是PHP Day #28

psr>4

{'''''"autoload":'{'''''''''"psr>4":'{'''''''''''''"App\\":'"app/"'''''''''}'''''}'}

$'composer'dump>autoload

Page 62: Composer 從入門到實戰

Composer 是PHP Day #28

index.php

composer.lock

composer.json

vendor/

app/

autoload.php

MyAwesomeClass.php

<?php'

namespace'App;'

class'MyAwesomeClass'extends'SuperPower'{'''''//'...'}

Page 63: Composer 從入門到實戰

Composer 是PHP Day #28

index.php

composer.lock

composer.json

vendor/

app/

autoload.php

MyAwesomeClass.php

<?php'

require'__DIR__.'/vendor/autoload.php';'

use'App\MyAwesomeClass;'

$awesomeness'='new'MyAwesomeClass();'

?>

Page 64: Composer 從入門到實戰

Composer 是PHP Day #28

classmap

{'''''"autoload":'{'''''''''"classmap":'[''''''''''''"libs"''''''''']'''''}'}

$'composer'dump>autoload

Page 65: Composer 從入門到實戰

Composer 是PHP Day #28

index.php

composer.lock

composer.json

vendor/

libs/

autoload.php

my>old>school>class.php

<?php'

class'my_old_school_class'{'''''//'...'}

Page 66: Composer 從入門到實戰

Composer 是PHP Day #28

index.php

composer.lock

composer.json

vendor/

libs/

autoload.php

my>old>school>class.php

<?php'

require'__DIR__.'/vendor/autoload.php';'

$oldschool'='new'my_old_school_class();'

?>

Page 67: Composer 從入門到實戰

Composer 是PHP Day #28

files

{'''''"autoload":'{'''''''''"files":'{'''''''''''''"helpers/my>functions.php"'''''''''},'''''}'}

$'composer'dump>autoload

Page 68: Composer 從入門到實戰

Composer 是PHP Day #28

index.php

composer.lock

composer.json

vendor/

helpers/

autoload.php

my>functions.php

<?php'

if'(!'function_exists('super_power'))'{'''''function'super_power()'{'''''''''//...'''''}'}

Page 69: Composer 從入門到實戰

Composer 是PHP Day #28

index.php

composer.lock

composer.json

vendor/

helpers/

autoload.php

my>functions.php

<?php'

require'__DIR__.'/vendor/autoload.php';'

?>'<!>>'...'>>>'''''<h1><?='super_power()'?></h1>'<!>>'...'>>>

Page 70: Composer 從入門到實戰

Composer 是PHP Day #28

• 那 Composer

• Composer

• 不•

• 很

Page 71: Composer 從入門到實戰

Legacy 開⽇日 和和

http://www.theqwan.com/contact

Page 72: Composer 從入門到實戰

覺 JetBrains 麼才更 回網 PhpStrom ⼀一

更 很

Page 73: Composer 從入門到實戰

Laravel http://www.laravel-dojo.com

事 PHP/Laravel ⼀一 更

Page 74: Composer 從入門到實戰

Composer 是PHP Day #28

動 Composer 想到 PHP

Composer

https://goo.gl/OfJK3C⽇日 email網

Page 75: Composer 從入門到實戰

PHPConf Taiwan 2016 PHP 間 網 2016/10/29 現們

Page 76: Composer 從入門到實戰

Composer 是PHP Day #28

Q & A您 ⽇日就