dtl / slinp
Slinp RAD PHPCR Web框架
Requires
- php: >=5.3.3
- doctrine/doctrine-bundle: ~1.2
- doctrine/phpcr-bundle: dev-master
- jackalope/jackalope-doctrine-dbal: dev-master
- phpcr/phpcr-utils: dev-master
- symfony-cmf/routing-bundle: 1.2.0
- symfony/monolog-bundle: ~2.4
- symfony/symfony: ~2.4
Requires (Dev)
- phpspec/phpspec: 2.1.x-dev
This package is auto-updated.
Last update: 2023-11-23 15:58:19 UTC
README
警告:此项目正在快速开发中!
Slinp是一个基于PHPCR、使用Symfony的RAD(快速应用开发)Web框架。它与Apache Sling项目有相似的理念。
Slinp的一个目标是在默认情况下实现零配置。它将通过期望类在特定位置定义并必要时回退来实现这一点。
路由
Slinp将传入的请求映射到PHPCR内容存储库中的路径。然后使用该路径上资源的节点类型(即节点)来决定使用哪个控制器。
路由工作原理如下
- 传入的HTTP请求:
/foobar
- 将请求映射到PHPCR路径:
/slinp/root/foobar
- 获取
/slinp/root/foobar
节点的节点类型 =>slinp:article
- 确定包和控制器名称:
SlinpBundle:Article
- 从控制器中的注释中读取路由
- 路由请求!
一个示例控制器如下所示
<?php namespace Slinp\SlinpBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Slinp\SlinpBundle\Annotation\Route; // controller for node type "slinp:article" class ArticleController extends Controller { /** * @Route(pattern="/") */ public function showAction($node) { return $this->render('SlinpBundle:Article:show', $node); } /** * @Route(pattern="/edit") */ public function editAction($node) { // process some editing return $this->render('SlinpBundle:Article:edit', $node); } }
节点映射
Slinp包装了PHPCR会话,以使用户定义的类表示PHPCR节点,与路由一样,用户对象的路径从节点类型名称推断出来,因此类型为"mycms:article"的PHPCR节点将解析为
Namespace\Of\MyCmsBundle\SlinpNode\SlinpNode\Article
如果该位置的Article
类不存在,它将回退到基于父节点类型查找类,如果所有其他方法都失败,将使用标准对象。
文章是一个简单的类,它必须实现SlinpNodeInterface
,这强制类接受一个PHPCR NodeInterface
作为参数并提供一个获取器。
class Article implements SlinpNodeInterface { protected $phpcrNode; public function __construct(NodeInterface $phpcrNode) { $this->phpcrNode = $phpcrNode; } public function getPhpcrNode() { return $this->phpcrNode; } }
组件
Slinp组件与纯PHPCR一起工作,因此您可以在Slinp的上下文之外使用NodeMapper、Routing或ContentLoader组件。
什么是Slinp?
我想了很长时间关于基于节点类型的路由,经过两次失败的项目后,我听说Apache Sling项目。Sling与我想实现的目标非常接近,因此在阅读了Sling并实现了其中的一些想法后,Slinp应运而生。
最初我想把它命名为Pling,但这个名字已经被各种项目使用。所以我把"P"放在了最后。聪明吧?
为什么使用Slinp?
- 开发时间短 -- 定义一些节点类型,创建一个控制器,一些模板,就完成了 -- 或者只需使用内置的节点类型和控制器,创建一些内容!
- 基于节点类型的路由 -- Slinp以内容为中心。您可以将内容放在您想要的地方,它总是由同一个控制器渲染。通过注释向资源添加路由的能力使Slinp Web应用友好。
- 原理图CMS设计 -- 您可以使用PHPCrs节点类型自定义您的内容,使其尽可能严格或宽松!同时,您还可以创建自动生成的节点和属性。
为什么我将来应该使用Slinp?
Slinp尚未完成...
- 管理员生成 -- 节点类型为生成管理员表单提供了完美的元数据。由于节点类型的继承,管理员表单将始终回退到为
slinp:resource
定义的管理员表单。基本上,即时的管理员,无需烦恼。