byjg/xmlnuke

基于XML/JSON的PHP框架

安装: 298

依赖: 1

建议者: 0

安全: 0

星标: 10

关注者: 6

分支: 0

开放问题: 1

类型:项目

4.5.0 2015-07-15 01:25 UTC

This package is auto-updated.

Last update: 2024-09-15 17:49:16 UTC


README

自2002年以来,我开始开发XMLNuke项目。我创建了一个框架,因为我希望将我学到的PHP最佳实践应用到项目中,并希望提高我的生产力。事实上,我使用XMLNuke进行开发比使用其他框架更有效率。多年来,PHP从没有代码标准的3.3版本发展到了PSR-*、命名空间、面向对象和强大的composer。XMLNuke经历了所有变化并也发展了。使用XMLNuke框架开发的应用也不断发展,时间并没有摧毁框架项目或使用它的应用程序。

但XMLNuke面临的挑战比PHP和时间更大。XMLNuke由一个大型软件块组成。如果你想使用一个小功能,你必须安装和设置所有XMLNuke软件。

现在是时候迈出下一步了。我从XMLNuke中学到了很多东西,并产生了一些有用的例程和代码。现在,XMLNuke项目被拆分为几个小型且可管理的项目。这个过程正在进行中。有几十个小项目,这个数量还在不断增加。XMLNuke正在变得小巧,并使用这些项目。

这个过程中最重要的部分是小型项目有更好的代码质量(Sensiolab Insights、Scrutinizer CI和Code Climate)和单元测试(Travis-CI)。

基于XMLNuke的遗留软件将继续运行,但XMLNuke将不再维护。你可以在网站OpenSource ByJG上找到新项目列表

**国王万岁。 **

描述

Build Status

[ 主分支需要PHP53或更高版本,并完全符合PSR-0规范,通过使用命名空间。'php50'分支是XMLNuke的遗留版本,现在已弃用。 ]

XMLNuke是一个以数据为中心的Web开发框架。在XMLNuke中编程,你再也不必担心打开和关闭PHP标签以及管理意大利面条代码。你所有的代码都是基于对象的,所有代码仅生成XML或JSON数据,你可以选择。

这是一个XMLNuke页面

namespace MyProject\Modules;

use Xmlnuke\Core\Classes\XmlnukeDocument;
use Xmlnuke\Core\Module\BaseModule;

class Home extends BaseModule 
{
    public function __construct()
    {}

    public function CreatePage() 
    {
        $this->defaultXmlnukeDocument = new XmlnukeDocument("Title", "Abstract");
        ...
        return $this->defaultXmlnukeDocument;
    }
}

你可以轻松地向你的页面添加一些需求,而不必关心如何处理这些需求。例如,你可以定义你的页面需要身份验证、将被缓存或在SSL环境中执行。下面是示例

namespace MyProject\Modules;

use Xmlnuke\Core\Module\BaseModule;

class Home extends BaseModule 
{
    /**
     * requiresAutentication(), getAccessLevel() and getRole() handle the page security and access level
     */
    public functon requiresAutentication()
    {
        return true;
    }
        
    public function getAccessLevel()
    {
        return \Xmlnuke\Core\Enum\AccessLevel::OnlyRole;
    }
    
    public function getRole()
    {
        return new array("DIRECTOR", "MANAGER");
    }
        
    
    /**
     * useCache determines if the XMLNuke will store your page in a cache or not.
     * By default XMLNuke can store in the:
     *   - \Xmlnuke\Core\Cache\ArrayCacheEngine (Static Array), 
     *   - \Xmlnuke\Core\Cache\FileSystemCacheEngine (File System), 
     *   - \Xmlnuke\Core\Cache\MemcachedEngine (MemCached),
     *   - \Xmlnuke\Core\Cache\NoCacheEngine (Ignore Cache)
     * 
     * You can configure your own cache strategy by implementing the interface 
     * \Xmlnuke\Core\Cache\ICacheEngine.
     */ 
    public function useCache()
    {
        if ($this->_action != "")
        {
              return false;
        }
        else
        {
              return true;
        }
    }

    /** 
     * Determines if your page requires SSL or Not
     */
    public function requiresSSL()
    {
        return \Xmlnuke\Core\Enum\SSLAccess::ForceSSL;
    }
}

如果你使用经典获取器和设置器或属性与模型一起工作,你可以将其添加到你的页面中,XMLNuke将输出。例如

namespace MyProject\Classes;

class MyClass
{
    protected $_name;
    public function getName() ...;
    public function setName($value) ...;
        
    protected $_age;
    public function getAge() ...;
    public function setAge($value) ...;
}
namespace MyProject\Modules;

use MyProject\Classes;
use Xmlnuke\Core\Classes\XmlnukeDocument;
use Xmlnuke\Core\Module\BaseModule;

class Home extends BaseModule 
{
    public function CreatePage() 
    {
        $this->defaultXmlnukeDocument = new XmlnukeDocument("Title", "Abstract");
        ...
        
        $myClass = new MyClass();
        $myClass->setName('Joao');
        $myClass->setAge(39);
        ...
        $this->defaultXmlnukeDocument->addXmlnukeObject($myClass);
            
        return $this->defaultXmlnukeDocument;
    }
}

之后,你可以关联一个XSL片段来处理这些数据并生成HTML或其他你想要生成的XSL转换内容。你可以通过调用你的网络浏览器来获取原始XML或JSON数据

http://youserver/xmlnuke.php?module=byjg.home&raw=xml&spath=//MyProject_Classes_MyClass
<xmlnuke xpath="//MyProject_Classes_MyClass">
    <MyProject_Classes_MyClass>
        <name>Joao</name>
        <age>39</age>
    </MyProject_Classes_MyClass>
</xmlnuke>

http://yourserver/xmlnuke.php?module=byjg.home&raw=json&xpath=//MyProject_Classes_MyClass;
{
    "MyProject_Classes_MyClass": {
        "name": "Joao",
        "age": "39"
    }
}

请参阅Wiki获取更多示例;

安装

主分支需要PHP 5.3来运行。旧版本的PHP可以使用遗留的'php50'分支。

Composer:项目级别安装

Composer可以下载XMLNuke并在同一时间创建一个空XMLNuke项目。

为此,你必须创建一个空文件夹并将以下composer.json文件放入其中

{
    "require": {
        "byjg/xmlnuke": "dev-master"
    },
    "minimum-stability": "dev",
    "scripts": {
        "post-install-cmd": [
             "Xmlnuke\\Util\\Composer::postInstallCmd"
        ],
	"post-update-cmd" : [
             "Xmlnuke\\Util\\Composer::postInstallCmd"
        ]
    }
}

然后执行以下命令

composer install

此过程也适用于现有的XMLNuke项目。

Composer:使用global全局安装

您可以使用composer全局安装XMLNuke。为此,请执行以下命令:

# use dev-master for stable version
# use dev-develop for unstable/develop versions
# use the version number for specific version
composer global require "byjg/xmlnuke=dev-master"

请确保文件夹~/.composer可以被您的web服务器访问。

有趣的是,文件夹~/.composer/vendor/bin是服务器的PATH。

export PATH=~/.composer/vendor/bin:$PATH

Composer:使用create-project进行全局安装

sudo composer create-project byjg/xmlnuke /opt/xmlnuke dev-master

命令行(Debian/Ubuntu)

您必须安装您的web服务器(Apache2、Lighttd、nginx等)。XMLNuke需要PHP。

apt-get install php5-xsl php5-json

下载XMLNuke包。您可以从以下网址下载:

在任何文件夹中提取包,例如/opt/xmlnuke。**注意**:XMLNuke文件夹不能被您的Web浏览器访问。

在您的终端运行

cd /opt/xmlnuke
./copy-dist-files.sh link yes

选择并创建一个用于您项目的文件夹。这个文件夹必须可以通过您的web浏览器访问。

mkdir /var/www/my-project
php /opt/xmlnuke/create-php5-project.php /var/www/my-project myproject en-us pt-br
ln -s /opt/xmlnuke/xmlnuke-common /var/www/my-project/common

现在,只需测试它

http://yourserver/my-project

Windows

您必须安装您的web服务器(Xampp、Apache2、IIS等)并配置它以运行PHP5脚本。请确保XSL扩展已安装。

下载XMLNuke包。您可以从以下网址下载:

在任何文件夹中提取包,例如D:\data\xmlnuke。
**注意**:XMLNuke文件夹不能被您的Web浏览器访问。

使用Windows资源管理器找到您的XMLNuke文件夹,双击文件"copy-dist-files.vbs"。按照说明操作。

选择并创建一个用于您项目的文件夹(例如c:\InetPub\wwwroot\my-project)。这个文件夹必须可以通过您的web浏览器访问。使用Windows资源管理器找到您的XMLNuke文件夹,双击文件"create-php5-project.vbs",并按照说明操作。

现在,只需测试它

http://yourserver/my-project

开发

master分支是稳定版本。所有开发将在develop分支上进行。合并请求将在develop分支上接受。

Pre-Commit Hook。

您可以在每次提交之前执行所有单元测试的预提交钩子。使用以下命令安装此钩子:

cd <xmlnukedir>
ln -s <xmlnukedir>/utils/git/hooks/pre-commit .git/hooks