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/
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/" } } } ] }