Upload
shengyou-fan
View
3.908
Download
0
Embed Size (px)
Citation preview
是
2016/09/22
主 'Shengyou'Fan
PHP' 'Day'#28
Composer 是PHP Day #28
好
https://youtu.be/1cABv5Ou0oE
http://www.slideshare.net/shengyou/
composerJfromscratch
https://github.com/laravelJdojo/
20160922JphpJtheJdayJdemo
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"'''''}'}
Composer 是PHP Day #28
只•
• Composer
• Composer
• Composer 啊• 不•
很
Composer 是PHP Day #28
PHP
三只
HTTP⾝身
要成會
index.php
posts.php
inc/
libs/
出 ⼼心 再
多
A
B
classes/
bootstrap.php
那 URL php 再
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";
Composer 是PHP Day #28
多 new 多 ⾯面
//' 'Class'$class'='new'MyClass();'
//' 'Class' 然'PHP'Fatal'error:''Class''MyClass''not'found'in'scripts.php'on'line'x
Composer 是PHP Day #28
那 都libs/
A
B
C
E E
話情
D D
道
Av.2v.1
Composer 是PHP Day #28
Composer • 點• 嗎 那都• 第• 於最•
Composer因 ⼒力 情
Composer 是PHP Day #28
composer.phar再
+ +
git果
php 5.3.2(openssl extension)
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/'
Composer 是PHP Day #28
Windows 發• 中 Composer 起 for Windows
• 那 起 看 能同看 Composer 那 PHP網 起 php.exe
道網 PHP 道 起 ⼼心
https://getcomposer.org/Composer>Setup.exe
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與
Composer 是PHP Day #28
再• Composer PHAR 再 (PHP archive)網感 PHP Runtime 有 ( )
• composer.phar 道 成會 網想學 與
$'php'composer.phar'[command]
Composer 是PHP Day #28
• 想學著增 網 想學與$'[php]'composer[.phar]'[>>version]
Composer 是PHP Day #28
Composer• 上 Composer網 bug-
fix$'[php]'composer[.phar]'self>update
Composer 是PHP Day #28
PHP • HTTP PHP CLI PHP
個 CLI PHP 個 CLI PHP 定$'php'>v $'php'>r'"echo'PHP_BINARY;"
Composer 是PHP Day #28
次 extension• HTTP CLI php.ini
個 CLI PHP php.ini ⼼心
$'php'>>ini
個 CLI extension
$'php'>m
Composer 是PHP Day #28
XDebug 今下• Composer XDebug
alias 過 XDebug
alias'composer='php'>n'/usr/local/bin/composer'⽣生 網 都 做 ^.<
ComposerComposer 啊 ⼼心
Composer 是PHP Day #28
Composer • 為 成會
• Composer
$'cd'~/Code/{MyProject}
$'composer'init(那 給 'composer.json)
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 ⼼心 再
Composer 是PHP Day #28
時⼈人• PHP 都 與Packagist.org
• PHP ⽤用 網 ⾃自說 因 那
/ 說P.S Composer Packagist
Composer 是PHP Day #28
$'composer'require'{vendor}/{project}'$'composer'install
Composer 是PHP Day #28
$'composer'update
Composer 是PHP Day #28
⼼心
<?php'
require'__DIR__.'/vendor/autoload.php';
多 'require
Composer 是PHP Day #28
多 網 …
Composer 是PHP Day #28
新
X Y ZMajorBreaks
MinorFeatures
PatchFixes
. .
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
'享
享 '
'
'享
'
'
'
'
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網 @ 想
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^與 ^嗎 Composer 網 上 中 Copmposer
Composer 是PHP Day #28
所多 得• 網 composer'require
• 樣 composer.json 網 composer'validate
• 情這 網太 ⽂文 dev-master 的 * ( 全 在 裡 Packagist )
• ⼿手 把 SemVer ⾏行 ( 享 很 把)
• 樣 所多 樂 網 中Packagist Semver Checker 多
Composer 是PHP Day #28
json 再 lock 再!?年 commit VCS
Composer 是PHP Day #28
• composer.json
- 那 ⼼心• composer.lock
- 知• vendor
- 起
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.
Composer 是PHP Day #28
VCS
update install
json V.S lock
Composer 是PHP Day #28
/vendor'/node_modules'composer.phar
.gitignore
(Jordi' 'lock'再 果 )
Composer 是PHP Day #28
install 的 update想學 歡 網 …
Composer 是PHP Day #28
1. 'composer.lock' 太最 '2. 最 網 'composer'update' '3.最 網那 'lock' 'package'
$'[php]'composer[.phar]'install
Composer 是PHP Day #28
1. 'composer.json'再'2. ⼼心 網作 ''3. 作 'packages'4. 'composer.lock
$'[php]'composer[.phar]'update
Composer 是PHP Day #28
• $'composer'install
- (git'clone) 網那
• $'composer'update
- composer.json
-
( composer.lock 再)
( 那快沒後第 )
不多 起
Composer 是PHP Day #28
能⾏行• 能⾏行 與
- 錯 (recca0120/laravel>tracy)
- 發 (vlucas/phpdotenv)
- 說對 都 (robmorgan/phinx)
- 可說對 (fzaninotto/faker)
- (nesbot/carbon)
Composer 是PHP Day #28
錯$'composer'require'recca0120/laravel>tracy
• 起 給• 起 多 等如 網 全 ⽅方 好
• print_r()因var_dump() 發 ⼦子
• 說對 sql 新 情
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);'}
Composer 是PHP Day #28
發$'composer'require'vlucas/phpdotenv
• 說 多 起• 都 不 網 說都 都
• 起 網 ⼼心 說
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'));'//'...
Composer 是PHP Day #28
說對 都$'composer'require'robmorgan/phinx
• 起 都 網 說對• 網 說對• 看 說對 本• 說對 也也
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
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
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
Composer 是PHP Day #28
可說對$'composer'require'fzaninotto/faker
• 多 說對 起 網每 說對 aaa因xxx因asdf 我 說對
• 剛 因 無 說對• 網 可 說對
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),'];
Composer 是PHP Day #28
$'composer'require'nesbot/carbon
• date() 不著 去•
• 真真• 新
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)),'];
Composer 是PHP Day #28
{'''''"autoload":'{'''''''''"psr>4":'{...},'''''''''"classmap":'[...],'''''''''"files":'[...]'''''},'''''"autoload>dev":'{'''''''''"psr>4":'{...},'''''''''"classmap":'[...],'''''''''"files":'[...]'''''},'}
$'vim'composer.json
Composer 是PHP Day #28
psr>4
{'''''"autoload":'{'''''''''"psr>4":'{'''''''''''''"App\\":'"app/"'''''''''}'''''}'}
$'composer'dump>autoload
Composer 是PHP Day #28
index.php
composer.lock
composer.json
vendor/
app/
autoload.php
MyAwesomeClass.php
<?php'
namespace'App;'
class'MyAwesomeClass'extends'SuperPower'{'''''//'...'}
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();'
?>
Composer 是PHP Day #28
classmap
{'''''"autoload":'{'''''''''"classmap":'[''''''''''''"libs"''''''''']'''''}'}
$'composer'dump>autoload
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'{'''''//'...'}
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();'
?>
Composer 是PHP Day #28
files
{'''''"autoload":'{'''''''''"files":'{'''''''''''''"helpers/my>functions.php"'''''''''},'''''}'}
$'composer'dump>autoload
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()'{'''''''''//...'''''}'}
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>'<!>>'...'>>>
Composer 是PHP Day #28
• 那 Composer
• Composer
• 不•
• 很
Legacy 開⽇日 和和
http://www.theqwan.com/contact
覺 JetBrains 麼才更 回網 PhpStrom ⼀一
更 很
Laravel http://www.laravel-dojo.com
事 PHP/Laravel ⼀一 更
Composer 是PHP Day #28
動 Composer 想到 PHP
Composer
https://goo.gl/OfJK3C⽇日 email網
PHPConf Taiwan 2016 PHP 間 網 2016/10/29 現們
Composer 是PHP Day #28
Q & A您 ⽇日就