dneustadt / majima
majima 是一个轻量级的 PHP 框架
Requires
- dwoo/dwoo: ^1.3
- fpdo/fluentpdo: ^1.1
- leafo/scssphp: ^0.6.7
- patchwork/jsqueeze: ^2.0
- psr/log: ^1.0
- symfony/config: ^3.2
- symfony/dependency-injection: ^3.2
- symfony/framework-bundle: ^3.2
- symfony/http-foundation: ^3.2
- symfony/http-kernel: ^3.2
- symfony/security: ^3.2
- symfony/security-bundle: ^3.2
This package is auto-updated.
Last update: 2024-09-13 03:48:31 UTC
README
- 许可证:MIT
- Github 仓库:https://github.com/dneustadt/majima
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
,该值将在缓存清空后重新生成。