composer

composer | composer库

Composer 的结构详解

Composer scripts脚本:事件列表与脚本触发

开发 Composer 包详细步骤

psr0规则

psr4规则

"extra": {
    "laravel": {
        "providers": [
            "Zhiyi\\Component\\ZhiyiPlus\\PlusComponentFeed\\FeedServiceProvider"
        ]
    }
},
注册路由、传输数据

class FeedServiceProvider extends ServiceProvider
{
    public function boot()
    {
        $this->routeMap();
        $this->registerObserves();
        $this->loadViewsFrom(dirname(__DIR__).'/views/', 'feed:view');
        $this->loadMigrationsFrom([
            dirname(__DIR__).'/database/migrations',
        ]);
        $this->publishes([
            dirname(__DIR__).'/admin/public' => $this->app->PublicPath()
                .'/assets/feed',
        ], 'feed:resource/assets');
        $this->app->make(BootstrapAPIsEventer::class)
            ->listen('v2', function () {
                return Cache::rememberForever('feed-bootstrapper',
                    function () {
                        return [
                            'feed' => [
                                'reward' => setting(SettingNameSpace::FEED,
                                    'reward-switch'),
                                'paycontrol' => setting(SettingNameSpace::FEED, 'pay-switch',
                                    false),
                                'items' => setting(SettingNameSpace::FEED, 'pay-items',
                                    []),
                                'limit' => setting(SettingNameSpace::FEED,
                                    'pay-word-limit', 50),
                            ],
                        ];
                    });
            });
        $this->app->make(PinnedsNotificationEventer::class)->listen(function () {
            return [
                'name' => 'feeds',
                'namespace' => FeedPinned::class,
                'owner_prefix' => 'target_user',
                'wherecolumn' => function (Builder $query) {
                    return $query
                        ->whereNull('expires_at')
                        ->where('channel', 'comment')
                        ->has('feed')
                        ->has('comment');
                },
            ];
        });
        $this
            ->app
            ->make('Illuminate\Database\Eloquent\Factory')
            ->load(__DIR__.'/../database/factories');
    }
}
开发自己的包, 配置composer.json
"repositories": {
        "local": {
            "type": "path",
            "url": "path/to/your/package"
        }
}
运行composer require your_vendor_name/package_name
将在vendor目录下将包建立一个软链接

autoload机制

psr0规则
组织名(vendor name),空间名(namespace),类名(class name)

psr4规则:
1. 减少代码目录的深度
2. 可以通过前缀快速找到映射目录,提高自动加载的效率
3. 不必须在vendor目录下

按规则从类名找到类文件路径,并动态加载
function autload($classname) {
    $filename='';
    ...
    require $filename;
}
spl_autoload_register('autoload')

require "vendor/autoload.php";
require_once "vendor/composer/autoload_real.php"
autoload_real.php加载三种类型
1.autoload_namespace.php: 即psr0规则
2.autoload_psr4.php: 
3.autoload_classname.php:

国内镜像源

建议:在更改配置源之前,推荐先执行 composer clearcache 清除缓存
若项目之前已通过其他源安装,务必删除 composer.lock 以及 vendor 目录,重新生成。

云服务商
packagist.phpcomposer.com
packagist.laravel-china.org

阿里云
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

华为云
composer config -g repo.packagist composer https://repo.huaweicloud.com/repository/php/

腾讯云
composer config -g repo.packagist composer https://mirrors.cloud.tencent.com/composer/

laravel artisan 命令列表

laravel artisan命令大全

php artisan list
php artisan help make:model
php artisan make:modell product -mc
php artisan route:list

类似于apt-get npm的PHP工具

安装 composer
curl -sS https://getcomposer.org/installer | php
mv composer.phar  /usr/local/bin/composer
ln -s /usr/local/php  /usr/local/bin/php


composer package list

创建新项目:
composer create-project --prefer-dist laravel/laravel Blog 5.6.*

直接安装:
composer require "twig/twig:1.*"

安装和更新包:
composer install
composer update
composer remove
composer show --platform

移除两个包:
composer remove vendor/package vendor/package2

composer search monolog
显示可安装的包:
composer show
composer show monolog/monolog

composer config -gl  查看全局设置

安装库修改为国内镜像源
composer config -g repo.packagist composer https://packagist.phpcomposer.com
composer selfupdate
或者
找到composer的[home]路径,
修改config.json文件全局配置安装包源
{
    "config": {},
    "repositories": [
        {
            "type": "composer", 
            "url": "https://packagist.phpcomposer.com"
        }
    ]
}

配置文件:
composer.json
{
    "require": {
        "monolog/monolog": "1.0.*"
        "igorw/json": ">=1.0,<2.0"
    }
}

自动装载(autoloading):
require 'vendor/autoload.php';
$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
$log->addWarning('Foo')

自定义autoloading:
{
    "autoload": {
        "psr-4": {"Acme\\": "src/"}
    }
}

在返回值中加入更多的命名空间:
$loader = require 'vendor/autoload.php';
$loader->add('Acme\\Test\\', __DIR__);


{
    "license": [
       "LGPL-2.1",
       "GPL-3.0+"
    ]
}

{
    "authors": [
        {
            "name": "Nils Adermann",
            "email": "naderman@naderman.de",
            "homepage": "http://www.naderman.de",
            "role": "Developer"
        },
        {
            "name": "Jordi Boggiano",
            "email": "j.boggiano@seld.be",
            "homepage": "http://seld.be",
            "role": "Developer"
        }
    ]
}

{
    "suggest": {
        "monolog/monolog": "Allows more advanced logging of the application flow"
    }
}

库文件:
{
    "repositories": [
        {
            "type": "composer",
            "url": "http://packages.example.com"
        },
        {
            "type": "composer",
            "url": "https://packages.example.com",
            "options": {
                "ssl": {
                    "verify_peer": "true"
                }
            }
        },
        {
            "type": "vcs",
            "url": "https://github.com/Seldaek/monolog"
        },
        {
            "type": "pear",
            "url": "http://pear2.php.net"
        },
        {
            "type": "package",
            "package": {
                "name": "smarty/smarty",
                "version": "3.1.7",
                "dist": {
                    "url": "http://www.smarty.net/files/Smarty-3.1.7.zip",
                    "type": "zip"
                },
                "source": {
                    "url": "http://smarty-php.googlecode.com/svn/",
                    "type": "svn",
                    "reference": "tags/Smarty_3_1_7/distribution/"
                }
            }
        }
    ]
}