webarchitect609 / bitrix-admin-helper-controller
比 `digitalwand/digitalwand.admin_helper` 更好的控制器,无需任何 bitrix 模块和愚蠢的类命名
Requires
- php: ^7.0
- digitalwand/digitalwand.admin_helper: ^2.1
Suggests
- webarchitect609/bitrix-neverinclude: For Bitrix modules autoloading (see docs for known restrictions!)
This package is not auto-updated.
Last update: 2022-02-01 13:13:49 UTC
README
请注意:由于与 digitalwand/digitalwand.admin_helper
的过度复杂性,该包已被废弃,存在大量错误,实际上已被遗弃。
替换 digitalwand/digitalwand.admin_helper
包的控制器,允许不创建自己的 Bitrix 模块即可在后台管理中创建 CRUD 页面。
请注意:目前为不稳定版本。
要使用此库,请
1 通过 composer 安装
composer require webarchitect609/bitrix-admin-helper-controller
此时将在 bitrix/modules
中安装 digitalwand/digitalwand.admin_helper 包。如果需要将其安装在 local/modules
,请将以下内容添加到 composer.json
"extra": {
"installer-paths": {
"local/modules/{$name}/": [
"type:bitrix-module"
]
}
},
2 根据示例文件 scripts/admin-helper-controller.php
创建连接模块的脚本,并使用规则将其连接到 urlrewrite.php
文件
[
'CONDITION' => '#^/bitrix/admin/admin_helper_controller.php#',
'RULE' => '',
'ID' => '',
'PATH' => '/admin-helper-controller.php',
],
在 CONDITION
路径中,不要使用低于 /bitrix/admin
的级别,因为添加到菜单并按此 URL 跳转后,所有其他链接将无法使用。
3 namespace 的前两级是根据模块名称生成的,vendor 和 package 由点分隔。因此,必须确保所有帮助器和视觉接口的类都在第三级及更高级别中定义,而帮助器应指定 namespace 的前两级 $module
。在此过程中,模块名称应与 namespace 的定义一致。否则,由于尽管 namespace 不区分大小写,但类自动加载是在区分大小写模式下进行的(因为其中使用了类似 Unix 的文件系统),因此找不到类。
例如,
<?php
namespace Foo\Bar\AdminInterface;
use Foo\Bar\Table\BarTaskTable;
use DigitalWand\AdminHelper\Helper\AdminEditHelper;
class BarTaskEditHelper extends AdminEditHelper
{
protected static $model = BarTaskTable::class;
public static $module = 'Foo.Bar';
protected static $routerUrl = '/bitrix/admin/admin_helper_controller.php';
}
4 根据 urlrewrite.php 中的规则,帮助器必须重新定义 $routerUrl(请参阅上面的示例)提示:由于静态成员不能以常规方式重写,因此建议使用常量以避免重复,如果使用多个帮助器。
5 如果系统中存在指定的 $module 帮助器 Bitrix 模块,并且需要显式连接它,则使用
\WebArch\BitrixAdminHelperController\Controller::withTryIncludeModule(true)
在连接 $module 之前,将字符串转换为小写。默认情况下,不会尝试连接模块。
6 帮助器类名应按模式 <Entity_name>(List|Edit)Helper 构建,而接口类名应按相应模式 <Entity_name>AdminInterface 构建
7 帮助器必须严格位于与接口相同的级别。
所有这些限制和需要执行的繁琐规则都是由于 digitalwand/digitalwand.admin_helper
包以与 Bitrix 相似的假面向对象风格编写,尽管它解决了非常紧迫的问题。
8 通过注册事件处理器 main:OnBuildGlobalMenu
并从帮助器获取列表 URL 来添加到菜单。
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'main',
'OnBuildGlobalMenu',
function (&$adminMenu, &$moduleMenu) {
$moduleMenu[] = [
'parent_menu' => 'global_menu_store',
'section' => 'Bar task list',
'sort' => 610,
'url' => Foo\Bar\AdminInterface\BarTaskListHelper::getUrl(),
'text' => 'Bar task list',
'title' => 'Create and view bar tasks',
'icon' => 'sale_menu_icon_statistic',
'page_icon' => 'sale_page_icon_statistic',
'item_id' => 'my-bar-task-list',
'items' => [],
];
}
);