dneustadt/majima

majima 是一个轻量级的 PHP 框架

安装: 25

依赖: 0

建议者: 0

安全: 0

星标: 5

关注者: 3

分支: 2

开放问题: 0

类型:项目

0.1.0 2017-09-06 22:13 UTC

This package is auto-updated.

Last update: 2024-09-13 03:48:31 UTC


README

Scrutinizer Join the chat at https://gitter.im/majima-framework/Lobby

majima 是一个基于 Symfony 组件的轻量级 PHP 框架。它具有一个插件系统,该系统依赖于依赖注入的概念,应该足以作为大多数 Web 应用的基础。

功能

  • 插件系统
    • 模板继承
    • JS 和 LESS 编译收集器
    • 安装和更新程序
  • 模板引擎
    • 用于继承、路由和资产链接的函数
    • HTML bootstrap 模板
  • 查询构建器
  • 用户提供者

服务器要求

  • PHP 5.6.4 或更高版本
  • Apache 2.2 或 2.4
  • Apache 的 mod_rewrite 模块
  • MySQL 5.5.0 或更高版本

所需 PHP 扩展

安装

1.) 使用以下命令将 git 仓库克隆到所需的目录

git clone https://github.com/dneustadt/majima.git

或使用 composer

composer require dneustadt/majima

2.) 设置正确的目录权限

chmod -R 755 var
chmod -R 755 web
chmod -R 755 upload

3.) 从同一目录安装依赖

composer install

4.) 创建一个新的 MySQL 数据库

5.) 通过在网页浏览器中访问 URL 来运行 majima 安装脚本。这应该是您上传 majima 文件的 URL。

  • 如果您在根目录中安装了 majima,您应该访问:http://example.com/install
  • 如果您在名为 majima 的自己的子目录中安装了 majima,例如,您应该访问:http://example.com/majima/install

插件

有关真实示例,请参阅演示插件

要创建一个新的插件,首先在 plugins 目录下创建一个新的目录。在这个例子中,它将是 MyPlugin。在该新目录中创建一个新的类 MyPlugin.php。文件名必须与包含文件夹的名称匹配。

通过扩展 PluginAbstract,您将获得对 ContainerBuilder 引用的访问

$this->container // returns instance of ContainerBuilder

插件类示例

namespace Plugins\MyPlugin;
 
class MyPlugin extends PluginAbstract
{
    private $priority = 0;
    
    private $version = '1.0.0';
 
    public function getPriority()
    {
        return $this->priority;
    }

返回插件加载顺序的优先级整数。默认值为 1

    public function getVersion()
    {
        return $this->version;
    }

返回插件的版本。默认值为 1.0.0。如果版本比数据库中保存的版本新,则会调用 update() 方法。

    public function update()
    {
    }
    
    public function install()
    {
    }

如果插件尚未在数据库中注册,则执行某些操作,例如创建表。

    public function build()
    {
    }

使用此方法和 $this->container 添加编译器传递,设置容器服务或参数。

    public function registerControllers()
    {
        return new ControllerCollection([
            'my_plugin.my_controller' => MyController::class,
            'majima.admin_controller' => AdminControllerDecorator::class,
        ]);
    }

使用此方法注册新的控制器或装饰现有的控制器。由于 id majima.admin_controller 已经设置,该控制器的服务将被装饰。装饰服务的新的 id 将由插件类名的蛇形命名法开头,因此在这种情况下将是 my_plugin.majima.admin_controller

    public function setRoutes()
    {
        $routeCollection = new RouteCollection();
        $routeCollection->addRoute(
            new RouteConfig(
                'myPlugin_index',
                '/hello/world/',
                'my_plugin.my_controller:indexAction'
            )
        );
        $routeCollection->addRoute(
            new RouteConfig(
                'admin_new',
                '/admin/new/',
                'my_plugin.majima.admin_controller:newAction'
            )
        );
        return $routeCollection;
    }

增强控制器路由以进行路由。例如,路由的名称/ id(如 myPlugin_index)还将确定该操作的视图将在哪里查找。下划线将被转换为斜杠,首字母将被大写。因此,在这个例子中,majima 将查找模板 MyPlugin/index.tpl

    public function setViewResources()
    {
        $viewCollection = new ViewCollection(join(DIRECTORY_SEPARATOR, [__DIR__, 'Resources']));
        $viewCollection->setViews(['views']);
        return $viewCollection;
    }
 
    public function setCssResources()
    {
        $assetCollection = new AssetCollection(join(DIRECTORY_SEPARATOR, [__DIR__, 'Resources', 'css', 'src']));
        $assetCollection->setFrontendAssets([
            join(DIRECTORY_SEPARATOR, ['frontend', 'all.scss']),
        ]);
        $assetCollection->setBackendAssets([
            join(DIRECTORY_SEPARATOR, ['backend', 'all.scss']),
        ]);
        return $assetCollection;
    }
    
    public function setJsResources()
    {
        $assetCollection = new AssetCollection(join(DIRECTORY_SEPARATOR, [__DIR__, 'Resources', 'js', 'src']));
        $assetCollection->setFrontendAssets([
            join(DIRECTORY_SEPARATOR, ['frontend', 'jquery.js']),
        ]);
        $assetCollection->setBackendAssets([
            join(DIRECTORY_SEPARATOR, ['backend', 'jquery.plugin.js']),
        ]);
        return $assetCollection;
    }
}

收集路由和资产以供编译。资产可以根据前端和后端环境(当用户登录时)分别使用。

控制器示例

通过扩展 MajimaController,您可以访问以下引用

$this->container //returns instance of DependencyInjection\Container
$this->dbal //returns instance of FluentPDO
$this->engine //returns instance of Dwoo\Core
class MyController extends MajimaController
{
    /**
     * @param Request $request
     */
    public function indexAction(Request $request)
    {
        $bar = $this->dbal->from('foo')->fetchAll();
    
        $this->assign(
            [
                'foo' => $bar,
            ]
        );
    }
}

FluentPDO 是一个查询构建器
Dwoo 是 majima 的模板引擎
使用 assign 将数据数组传递到视图中。

如果可以将动作的路由解析为模板的路径(见上文),则您在动作中不需要返回任何内容。如果您不遵循惯例,您可以渲染模板并自行返回响应

    // returns Response with rendered content
    return $this->engine->render('/path/to/my/template.tpl');
模板函数

在 Dwoo 的自身函数基础上,majima 引入了一些额外的函数

{inherits "Index/index.tpl"}

几乎与 Dwoo 的 extends 相同,但允许您从 majima 的基础 HTML 引擎和先前加载的插件的视图中继承模板。

{url "index_index" array('foo' => $bar)}

将生成已注册路由的 URL。可选地传递 GET 参数数组。

{link "/web/css/style.min.css", $.cache_buster}

获取资产的绝对路径。可选地传递缓存破坏者值。您可以使用全局 $.cache_buster,该值将在缓存清空后重新生成。