dtl/slinp

该包已被废弃,不再维护。未建议替代包。

Slinp RAD PHPCR Web框架

安装: 1

依赖者: 0

建议者: 0

安全: 0

星星: 7

关注者: 5

分支: 0

开放问题: 5

类型:项目

dev-master 2014-06-29 07:51 UTC

This package is auto-updated.

Last update: 2023-11-23 15:58:19 UTC


README

Build Status

警告:此项目正在快速开发中!

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定义的管理员表单。基本上,即时的管理员,无需烦恼。