midgard/phpcr

此包已被废弃且不再维护。没有推荐替代包。

使用Midgard2实现的PHP内容存储库(PHPCR)实现

1.4 2013-01-30 12:47 UTC

This package is not auto-updated.

Last update: 2022-02-01 11:47:46 UTC


README

本项目实现了基于Midgard2PHP内容存储库(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表中定义,该表包含nameparent引用以及内容对象的引用
  • 节点类型的属性存储在其MgdSchema定义的表中(见示例
  • 多值属性和未在节点类型中定义的属性(例如,使用nt:unstructured)存储在midgard_node_property表中,该表包含name、对midgard_node条目的引用、typevalue
  • 二进制属性内容作为文件存储在存储库配置中定义的blobdir

可以通过为它们编写MgdSchema并将它们复制到Midgard的方案目录(默认为/usr/share/midgard2/schema)来注册新的节点类型。

工作空间

当Midgard2自己的工作空间实现在10.05.5中实现时,我们将支持使用JCR工作空间。工作空间字符串的格式将为

  • 工作空间
  • 工作空间/子工作空间

命名空间映射

PHPCR API使用命名空间来表示节点类型和属性名称。应使用常规的Midgard2 MgdSchema RDF映射

使用PHPCR的项目

许可

内容库是软件基础设施的重要组成部分,任何项目或公司,无论其商业模式如何,都必须能够使用它。因此,Midgard2 PHPCR 实现将以 GNU Lesser General Public License 的宽松条款提供。

开发

对 Midgard2 PHPCR 提供器的贡献非常受欢迎。开发协调在 GitHub 仓库上。

请随意关注仓库,创建分支并 提交拉取请求。代码审查、测试和 错误报告 也非常欢迎。

持续集成

Midgard2 PHPCR 提供器使用 Travis 进行持续集成。

如果您有此仓库的分支并希望对其进行测试,请在 Travis 网站上启用它。每次推送都会自动进行测试。