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