venne/packages

Nette 框架中管理包的简单解决方案

dev-master 2015-03-03 07:23 UTC

This package is auto-updated.

Last update: 2024-08-29 03:16:59 UTC


README

Nette 框架中管理包的简单解决方案。

它能解决哪些问题?

  • 注册 Nette\Compiler 的扩展
  • config.neon 中创建默认配置结构
  • 将资产目录发布到 %wwwDir%
  • 通过简单语法解析包路径

安装

安装包管理器

composer require venne/packages:@dev           // as a dependency
# composer create-project venne/packages:@dev  // aside from the project

将钩子添加到根 composer.json 文件

{
	"scripts": {
		"post-install-cmd": [
			"vendor/bin/package-manager sync --composer"
		],
		"post-update-cmd": [
			"vendor/bin/package-manager sync --composer"
		]
	}
}

通过 composer 命令使用它

composer require kdyby/doctrine

包定义

如果你已经创建了 composer.json 文件,你已经完成了 ;)

元数据

元数据允许你定义高级功能

  • relativePublicPath:资产文件所在的目录。
  • configuration:将复制到 config.neon 文件的数组。
  • installers:实现 Venne\Packages\IInstaller 的类的数组。

定义元数据有三种方式

1) 在 composer.json

{
	"extra": {
		"venne": {
			"relativePublicPath": "/Resources/public",
			"configuration": {
				"extensions": {
					"translation": "Kdyby\\Translation\\DI\\TranslationExtension"
				}
			},
			"installers": [
				"Namespace\MyInstaller"
			]
		}
	}
}

2) 在 .venne.php 文件中

实现接口 Venne\Packages\IPackage

<?php

namespace MyProject;

class Package extends \Venne\Packages\Package {}

3) 在 venne/packages-metadata 仓库中

分支并编辑 https://github.com/Venne/packages-metadata

额外功能

包管理器可以提供一些服务,你可以在应用程序中使用它们。确保你已经将包管理器作为依赖项安装

composer require venne/packages:@dev

现在你正在将其作为常规包使用。不仅仅是独立的包管理器。

服务 Venne\Packages\PathResolver

通过 @ 语法解析包路径的服务。使用 . 作为项目和包名之间的分隔符。例如:@kdyby.doctrine

$pathResolver = $container->getByType('Venne\Packages\PathResolver');
echo $pathResolver->expandPath('@my.package/foo/bar');        // /path_to_my_package/foo/bar
echo $pathResolver->expandResource('@my.package/foo/bar');    // {$resourcesDir}/my/package/foo/bar

新的宏和经典宏中的新可能性

{path @my.package/file}                   // browser_path_to_my.package/file
{extends @my.package/@layout.latte}       // extends from other package
{includeblock @my.package/@layout.latte}  // include blocks from template

命令

vendor/bin/package-manager list                # List packages
vendor/bin/package-manager sync                # Synchronize all packages with filesystem
vendor/bin/package-manager install <name>      # Install package
vendor/bin/package-manager uninstall <name>    # Uninstall package

包安装示例

composer require foo/bar:2.0.x [--prefer-dist] # Download package
vendor/bin/package-manager update              # Update local database of packages
vendor/bin/package-manager install foo.bar     # Install package