jackalope / jackalope-jackrabbit
Jackalope 为 Jackrabbit 提供传输库
Requires
- php: ^8.0
- ext-curl: *
- ext-dom: *
- ext-json: *
- ext-xml: *
- jackalope/jackalope: ^2.0.0
- phpcr/phpcr: ~2.1.5
- phpcr/phpcr-utils: ^1.8.0 || ^2.0
Requires (Dev)
- phpcr/phpcr-api-tests: 2.1.25
- phpstan/phpstan: ^1.9
- phpunit/phpunit: ^9.5
- psr/log: ~1.0
- symfony/console: ^2.3 || ^3.4 || ^4.3 || ^5.0 || ^6.0 || ^7.0
Provides
- 2.x-dev
- 2.0.0
- 2.0.0-beta2
- 2.0.0-beta1
- 1.x-dev
- 1.4.6
- 1.4.5
- 1.4.4
- 1.4.3
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.2
- 1.2.1
- 1.2.0
- 1.2.0-RC1
- 1.1.x-dev
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.1.0-RC1
- 1.0.x-dev
- 1.0.1
- 1.0.0
- 1.0.0-RC3
- 1.0.0-RC2
- 1.0.0-RC1
- 1.0.0-beta4
- 1.0.0-beta3
- 1.0.0-beta2
- 1.0.0-beta1
- 1.0.0-alpha3
- 1.0.0-alpha2
- dev-acl
This package is auto-updated.
Last update: 2024-09-03 07:14:10 UTC
README
Jackalope 是 PHP 内容存储库 API (PHPCR) 的强大实现。
Jackalope-Jackrabbit 使用 jackrabbit JCR 服务器作为存储引擎。
在 [email protected] 上讨论或在 irc.freenode.net 访问 #jackalope
许可证
此代码同时受 MIT 许可证和 Apache 许可证 Version 2.0 授权。请参阅此文件夹中的 LICENSE 文件。
先决条件
- libxml 版本 >= 2.7.0(由于 libxml 中的错误 http://bugs.php.net/bug.php?id=36501)
- libcurl(如果使用 7.35 版本时出现“Problem (2) in the Chunked-Encoded data”,请尝试更新您的 curl 版本)
- composer
安装
建议通过 composer 安装 jackalope。
$ mkdir my-project
$ cd my-project
$ composer init
$ composer require jackalope/jackalope-jackrabbit
Jackrabbit 存储服务器
除了 Jackalope 存储库外,您还需要 Jackrabbit 服务器组件。有关说明,请参阅 Jackalope Wiki。请确保您至少有在 协议实现的 VERSION 常量中指定的版本
phpunit 测试
如果您想运行测试,请参阅测试文件夹中的 README 文件 并检查您是否已告诉 composer 安装建议的依赖关系(参见安装)
启用命令
有几个有用的命令可以与存储库进行交互。
要使用控制台,将 cli-config.php.dist 复制到 cli-config.php 并配置连接参数。然后您可以使用 ./bin/jackalope
从 jackalope 目录运行命令
注意:如果您在 Symfony 中使用 PHPCR,DoctrinePHPCRBundle 提供了在正常 Symfony 控制台中使用的命令,您不需要进行任何特殊准备。
有一个 Jackalope 特定的命令 jackalope:run:jackrabbit
,您可以使用它来启动和停止一个独立的 Jackrabbit 服务器。
您可以从 phpcr-utils 获取许多有用的命令。要获取所有命令的列表,键入
./bin/jackalope
要获取特定命令的更多信息,请使用 help
命令。例如,要了解 phpcr:workspace:export
命令的更多信息,您将键入
./bin/jackalope help phpcr:workspace:export
引导
Jackalope 依赖于自动加载。命名空间和文件夹符合 PSR-0。您应使用 composer 生成的自动加载文件:vendor/autoload.php
如果您想将 jackalope 集成到其他 PSR-0 符合的代码并使用您自己的类加载器,请在 vendor/composer/autoload_namespaces.php
中查找映射
一旦您有了自动加载,您就需要引导库。获取 Jackrabbit 后端 PHPCR 会话的最小化示例代码
$jackrabbit_url = 'http://127.0.0.1:8080/server/'; $user = 'admin'; $pass = 'admin'; $workspace = 'default'; $factory = new \Jackalope\RepositoryFactoryJackrabbit(); $repository = $factory->getRepository( array("jackalope.jackrabbit_uri" => $jackrabbit_url) ); $credentials = new \PHPCR\SimpleCredentials($user, $pass); $session = $repository->login($credentials, $workspace);
要使用不同于 default
的工作区,您首先需要创建它。最简单的方法是运行命令 bin/jackalope phpcr:workspace:create <myworkspace>
,当然,您也可以使用 PHPCR API 从您的代码中创建工作区。
用法
入口点是创建存储后端指定的仓库工厂。从这一点开始,使用方式没有区别(除了支持的功能之外)。
// see Bootstrapping for how to get the session. $rootNode = $session->getNode("/"); $whitewashing = $rootNode->addNode("www-whitewashing-de"); $session->save(); $posts = $whitewashing->addNode("posts"); $session->save(); $post = $posts->addNode("welcome-to-blog"); $post->addMixin("mix:title"); $post->setProperty("jcr:title", "Welcome to my Blog!"); $post->setProperty("jcr:description", "This is the first post on my blog! Do you like it?"); $session->save();
有关如何使用 PHPCR API 的更详细教程,请参阅 PHPCR 教程。
查询语言
Jackalope 支持 PHPCR 标准查询语言 SQL2 以及查询对象模型(QOM)来程序化地构建查询。我们建议使用 QOM 或在 PHPCR 教程 中提到的 QueryBuilder。它们根据后端的能力使用最好的查询语言。稍后切换到另一个 PHPCR 实现不应引起任何问题。
Jackalope-Jackrabbit 还支持 JCR 1.0 中弃用的 SQL 和 XPath 查询语言。这些语言将被 Jackrabbit 在可预见的未来支持,但几乎肯定不会被其他 PHPCR 实现支持。因此,请谨慎使用,并且只有在您了解自己在做什么的情况下才使用它们。
使用 SQL 或 XPath 的一个原因是因为较新且功能更强大的 SQL2 在 Jackrabbit 方面并没有像旧语言那样优化。与 XPath 或 SQL 相比,使用 SQL2 的查询结果集大得多时速度要慢得多。
然而,最好是使用上面提到的 QueryBuilder,让实现为您的实现选择最有效的查询语言。
性能调整
如果您知道您将需要请求的节点的大量子节点,请在 Session::getNode 上使用深度提示。这将预取子节点以减少数据库往返次数。这是 PHPCR 标准的一部分。您还可以全局设置获取深度,但这仅适用于 Jackalope:调用 Session::setSessionOption 并使用 Session::OPTION_FETCH_DEPTH 设置为大于 1 的值。
如果您只需要知道子节点的名称,但不需要实际的节点,请使用 Node::getNodeNames。请注意,在使用 jackalope 时,不应在 getNodeNames 上使用类型过滤器。然而,使用 getNodes 仅获取您感兴趣的类型的节点可以使用类型过滤器,这非常有意义。
日志记录
Jackalope 支持日志记录,例如调查使用的查询的数量和类型。要启用日志记录,请向仓库工厂提供日志记录器实例。
$factory = new \Jackalope\RepositoryFactoryJackrabbit(); $logger = new Jackalope\Transport\Logging\DebugStack(); $options = array( 'jackalope.jackrabbit_uri' => $jackrabbit_url, 'jackalope.logger' => $logger, ); $repository = $factory->getRepository($options); ... // at the end, output debug information var_dump($logger->calls);
您还可以使用 Psr3Logger 类将一个兼容 PSR-3 的日志记录器(如 monolog)包装起来。
请注意,当在 Symfony2 中使用 jackalope 时,日志记录器集成在调试工具栏中。
实现说明
有关 Jackalope 是如何构建的介绍,请参阅 doc/architecture.md。查看源文件并生成 phpdoc。
未实现的功能
关于需要做什么的最好概述是跳过的 API 测试。查看 ImplementationLoader 以查看当前不工作的内容,并开始修改 :-)
贡献者
- Christian Stocker [email protected]
- David Buchmann [email protected]
- Tobias Ebnöther [email protected]
- Roland Schilter [email protected]
- Uwe Jäger [email protected]
- Lukas Kahwe Smith [email protected]
- Daniel Barsotti [email protected]
- 以及许多人