midgard / phpcr
使用Midgard2实现的PHP内容存储库(PHPCR)实现
Requires
- php: >=5.3.0
- ext-midgard2: >=10.05.6
- phpcr/phpcr: >=2.1.0-beta5
- phpcr/phpcr-utils: @dev
Requires (Dev)
- ext-midgard2: >=10.05.5
- phpcr/phpcr-api-tests: dev-master
Provides
- phpcr/phpcr-implementation: 2.1.0-beta3
This package is not auto-updated.
Last update: 2022-02-01 11:47:46 UTC
README
本项目实现了基于Midgard2的PHP内容存储库(PHPCR)接口的提供者。phpcr-midgard2
是一个完全兼容Jackalope的PHPCR提供者,可以在PHP内容管理系统(CMS)中使用,而无需Java。
使用Midgard2而不是Apache Jackrabbit的好处是使与许多CMS使用的常规关系型数据库的互操作性变得容易。Midgard2支持多种数据库,包括MySQL和SQLite。
安装
您需要安装midgard2 PHP扩展。在许多发行版中,设置它就像
$ sudo apt-get install php5-midgard2
如果您的发行版中没有Midgard2,则可以手动编译它或使用我们的预编译包。
然后设置您的项目依赖于midgard/phpcr
,使您的composer.json
包含
"require": {
"midgard/phpcr": ">=1.0"
}
然后只需通过Composer安装提供者
$ wget https://getcomposer.org.cn/composer.phar
$ php composer.phar install
您还需要将Midgard2 PHPCR模式从vendor/midgard/phpcr/data/share
复制到您的模式目录(默认为/usr/share/midgard2
)
$ sudo cp vendor/midgard/phpcr/data/share/schema/* /usr/share/midgard2/schema/
$ sudo cp vendor/midgard/phpcr/data/share/views/* /usr/share/midgard2/views/
入门
您可以使用Composer生成的自动加载器来加载所有需要的类
require 'vendor/autoload.php';
在包含自动加载器后,您应该能够打开Midgard2存储库会话
// Set up Midgard2 connection
$parameters = array(
// Use local SQLite file for storage
'midgard2.configuration.db.type' => 'SQLite',
'midgard2.configuration.db.name' => 'midgard2cr',
'midgard2.configuration.db.dir' => __DIR__,
// Where you want to store file attachments
'midgard2.configuration.blobdir' => '/var/lib/midgard2/blobs',
// Let Midgard2 initialize the DB as needed
'midgard2.configuration.db.init' => true,
);
// Get a Midgard repository
$repository = Midgard\PHPCR\RepositoryFactory::getRepository($parameters);
// Log in to get a session
$credentials = new \PHPCR\SimpleCredentials('admin', 'password');
$session = $repository->login($credentials, 'default');
之后,整个PHPCR API都将可用。请参阅examples`目录中的示例代码。
例如,使用MySQL时,连接参数可以是
$parameters = array(
// MySQL connection settings. The database has to exist
'midgard2.configuration.db.type' => 'MySQL',
'midgard2.configuration.db.name' => 'midgard2',
'midgard2.configuration.db.username' => 'midgard',
'midgard2.configuration.db.password' => 'midgard',
'midgard2.configuration.db.host' => '127.0.0.1',
'midgard2.configuration.db.port' => '3306'
// Let Midgard2 initialize the DB as needed
'midgard2.configuration.db.init' => true,
);
这是与上述使用SQLite的示例的唯一不同之处。
关于PHPCR
PHP内容存储库API是Java内容存储库规范(JCR)的PHP版本。维基百科
Java内容存储库API(JCR)是一套用于以统一方式访问内容存储库的Java平台应用程序编程接口(API)。内容存储库用于在内容管理系统(CMS)中存储内容数据以及用于内容管理系统(CMS)的元数据,例如版本元数据。
这样,内容管理系统就不会依赖于特定的数据库或其他存储方案。相反,可以根据部署需求选择内容存储库提供者。
目前正在进行关于将PHPCR API包含到Java内容存储库规范中的讨论。
关于Midgard2
Midgard2是一个开源的内容存储库库,适用于多种编程语言。
Midgard2能够访问和管理存储在各种常用关系数据库中的内容,包括SQLite、MySQL和Postgres。为此,您将获得一个相对简单的面向对象接口。示例
$article = new net_example_article();
$article->title = "Hello, world";
$article->create();
echo "Article {$article->title} was stored with GUID {$article->guid}";
PHPCR和Midgard2
已经有一些关于Midgard2内容存储库模型和PHPCR中使用的Java内容存储库模型之间的概念差异和相似性的研究。由于这些差异,需要一些概念映射。
- 存储库 = Midgard配置
- 会话 = Midgard连接
- 节点 = Midgard对象
- 节点类型 = MgdSchema
- 属性 = Midgard对象的属性或参数
- 工作空间 = Midgard工作空间
使Midgard树成为单根
Midgard PHPCR树是由midgard_node
对象构建的。这些对象仅用于构建树,并通过它们的objectguid
属性与树中的真实内容对象相关联。
不由MgdSchemas管理(因此,未注册到节点类型的属性)的属性由midgard_node_property
对象处理。
PHPCR如何映射到您的数据库?
Midgard2使用标准关系数据库进行内容存储。PHPCR模型以以下方式映射到数据库表
- 树结构在
midgard_node
表中定义,该表包含name
、parent
引用以及内容对象的引用 - 节点类型的属性存储在其MgdSchema定义的表中(见示例)
- 多值属性和未在节点类型中定义的属性(例如,使用
nt:unstructured
)存储在midgard_node_property
表中,该表包含name
、对midgard_node
条目的引用、type
和value
- 二进制属性内容作为文件存储在存储库配置中定义的
blobdir
可以通过为它们编写MgdSchema并将它们复制到Midgard的方案目录(默认为/usr/share/midgard2/schema
)来注册新的节点类型。
工作空间
当Midgard2自己的工作空间实现在10.05.5中实现时,我们将支持使用JCR工作空间。工作空间字符串的格式将为
工作空间
工作空间/子工作空间
命名空间映射
PHPCR API使用命名空间来表示节点类型和属性名称。应使用常规的Midgard2 MgdSchema RDF映射。
使用PHPCR的项目
- Symfony CMF
- Doctrine ODM
- Flow3/TYPO3
许可
内容库是软件基础设施的重要组成部分,任何项目或公司,无论其商业模式如何,都必须能够使用它。因此,Midgard2 PHPCR 实现将以 GNU Lesser General Public License 的宽松条款提供。
开发
对 Midgard2 PHPCR 提供器的贡献非常受欢迎。开发协调在 GitHub 仓库上。
请随意关注仓库,创建分支并 提交拉取请求。代码审查、测试和 错误报告 也非常欢迎。
持续集成
Midgard2 PHPCR 提供器使用 Travis 进行持续集成。
如果您有此仓库的分支并希望对其进行测试,请在 Travis 网站上启用它。每次推送都会自动进行测试。