mpmont/ci-toolkit

查看自动加载、通知库和辅助工具

dev-master 2021-07-19 16:02 UTC

This package is auto-updated.

Last update: 2024-09-19 22:48:50 UTC


README

一套为CodeIgniter 4提供的库和辅助工具

Composer安装

这样您应该在终端运行以下命令。

composer require mpmont/ci-toolkit dev-master

或者将以下内容添加到您的composer.json文件中。

{
    "require": {
        "mpmont/ci-toolkit": "dev-master"
    }
}

依赖关系

建议的依赖关系

IonAuth

作为一个认证系统,我建议使用Ion Auth。要将其添加到您的项目中,只需在项目中运行以下命令。

$ composer config minimum-stability dev
$ composer config repositories.ionAuth vcs git@github.com:benedmunds/CodeIgniter-Ion-Auth.git
$ composer require benedmunds/CodeIgniter-Ion-Auth:4.x-dev

Ion Auth的文档可以在这里找到。

pwrsrg/codeigniter4-cart-module

如果您正在构建商店并需要一个购物车模块,只需将其添加到您的composer.json中即可。

$ composer require pwrsrg/codeigniter4-cart-module

文档可以在这里找到。

基础控制器

codeigniter-base-controller是一个扩展的BaseController类,用于在您的CodeIgniter应用程序中使用。任何继承自BaseController的控制器都获得智能视图自动加载和布局支持。它强烈遵循约定优于配置的理念,优先考虑简单性和一致性,而不是配置和复杂性。

用法

如果您通过composer安装此软件包,那么控制器应使用不同的命名空间。在这种情况下,继承自基础控制器的控制器应扩展到\Toolkit\Controllers\BaseController,如下所示

<?php namespace App\Controllers;

class Home extends \Toolkit\Controllers\BaseController
{

    /**
     * No view loading here!
     */
    public function index()
    {
    }

}

视图和布局

视图将根据当前控制器和操作名称自动加载。在$this->data中设置的任何变量将通过视图和布局传递。默认情况下,类将在app/views/controller/action.php中查找视图。

为了防止自动渲染视图,请将$this->view设置为false

$this->view = false;

或者,为了加载一个不同于自动猜测的视图

$this->view = 'some_path/some_view.php';

视图将加载到布局中。类将查找app/views/layouts/backend.php布局文件或app/views/layouts/application.php,具体取决于是否是baseController或adminController。

如果您想在自己的控制器中覆盖这一点,只需将布局设置为任何您想要的。

$this->layout = 'layouts/yourlayout.php'

为了指定在布局中输出视图的位置,渲染后的视图将存储在$yield变量中

<h1>Header</h1>

<div id="page">
    <?php echo $this->renderSection('yield') ?>
</div>

<p>Footer</p>

如果您希望完全禁用布局并仅显示视图(这是一种特别适用于AJAX请求的技术),则可以将$this->layout设置为FALSE

$this->layout = FALSE;

$this->view一样,$this->layout也可以用于指定非传统的布局文件

$this->layout = 'layouts/mobile.php';

$this->data中设置的任何变量将通过视图和布局文件传递。

视图结构

您的视图应创建以支持CodeIgniter 4内置的布局功能

<?php echo $this->extend($layout); ?>

<?php echo $this->section('yield') ?>
    <h1>Hello World from the home/index view!</h1>
<?php echo $this->endSection() ?>

至于布局,那些应该有一个名为yield的渲染部分。

<!doctype html>
<html>
<head>
    <title>My Layout</title>
</head>
<body>
    This is my layout content
    <?php echo $this->renderSection('yield') ?>
</body>
</html>

为了实际上能够直接渲染视图而不使用布局,我们需要一个空的布局进行渲染。为此,在您的Views/layouts文件夹中包含了一个nolayout.php文件,它只执行视图渲染。

<?php echo $this->renderSection('yield') ?>

现在项目的完整文件夹结构已包含在项目中。

在控制器中加载辅助工具

如果您想在全局范围内加载控制器中的助手而不在函数内,您只需要将助手属性声明为数组,包含所有助手,如下所示

<?php namespace App\Controllers;

class Home extends AdminController
{
    protected $helpers = ['url'];

    public function index()
    {
    }

}

此工具包提供了一些您可以在应用程序中使用的助手。对于这些,您应该使用声明了命名空间的助手函数。

public function index()
{
    helper('\Toolkit\calc');
    echo convertToPercent(1, 34, 2);
    // output 2.94
}

使用提供的AdminLTE模板

要在项目中使用adminLTE,您首先应在public文件夹内创建一个名为backend的文件夹。

$ cd public
$ mkdir backend

然后,在您的composer.json文件中的scripts部分添加以下行

"scripts": {
    "post-update-cmd": [
        "cp -R vendor/almasaeed2010/adminlte/dist/ public/backend",
        "cp -R vendor/almasaeed2010/adminlte/plugins/ public/backend"
    ]
},

您可以根据项目结构更改文件夹。

使用登录视图

要加载提供的登录视图,您不应使用布局,因为这个视图没有布局。要做到这一点,您可以在控制器中如此加载

public function login() {
    $this->layout = false;
    $this->view = '\Toolkit\Views\login/index';
}

这将使用提供的类似以下的登录视图

Login

此视图依赖于表单助手,因此您必须在控制器中设置它。

protected $helpers = ['form'];

使用提供的Admin模板

提供了一个简单的admin模板,您可以使用它来构建后端应用程序。要在控制器或继承自提供的基控制器的基控制器中使用此模板,只需设置一个指向特定视图的新布局。

要在控制器中这样做,只需设置具有此属性

protected $layout = '\Toolkit\Views\layouts/backend';

admin模板的默认外观如下所示

Backend

您可以通过创建一个继承自toolkit\Backend的配置类来配置admin模板的外观

<?php

namespace Config;

use CodeIgniter\Config\BaseConfig;

class Backend extends \Toolkit\Config\Backend
{
    public $colors = [
        'sidebarBG' => '#343a40', // Change the sidebar color
        'sidebarLink' => '#c2c7d0', // Change the sidebar link color
    ];
    public $siteName = 'CI - Toolkit'; // Change sitename
    public $logoutControllerMethod = '#'; // Change logout link
    public $brandLink = '#'; // Set a brand link relative to the app like /home/index
    public $brand = 'CI - Tookit'; // Set the brand name
    public $copyrightLeft = 'All rights reserved'; // Your copyright info Left
    public $copyrightRight = null; // Your copyright info right
    public $breadcrumb = false; // Want to use breadcrumbs

    public $assetsPath = 'backend'; // Set your base folder in your assets structrure, should be the same folder you set on your composer file

    // A list of all the assets you're using in your backend application, just add more here to add your custom css and js
    public $css = [
        '/plugins/fontawesome-free/css/all.min.css',
        'https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.cs',
        '/dist/css/adminlte.min.css',
        'https://fonts.googleapis.ac.cn/css?family=Source+Sans+Pro:300,400,400i,700',
    ];
    public $js = [
        '/plugins/jquery/jquery.min.js',
        '/plugins/bootstrap/js/bootstrap.bundle.min.js',
        '/dist/js/adminlte.min.js',
    ];

    // Your navigation up to 2 levels deap
    public $navigation = [
        [
            'name' => 'Link 1',
            'link' => '#',
            'icon' => 'fas fa-circle nav-icon',
        ],
    ];
}

如果您决定使用将使用elephpant/breadcrumb的面包屑导航,请查阅其文档以使用面包屑。

如果您需要一个两层级的菜单结构,应按如下方式设置

public $navigation = [
    [
        'name' => 'Link 1',
        'link' => '#',
        'icon' => 'fas fa-circle nav-icon',
        'childs' => [
            [
                'name' => 'Link 1.1',
                'link' => '#',
                'icon' => 'fas fa-circle nav-icon',
            ],
            [
                'name' => 'Link 1.2',
                'link' => '#',
                'icon' => 'fas fa-circle nav-icon',
            ],
            [
                'name' => 'Link 1.3',
                'link' => '#',
                'icon' => 'fas fa-circle nav-icon',
            ],
        ],
    ],
];

通知库

发送电子邮件是几乎所有应用程序的核心功能,因此,为了不必反复重复发送电子邮件的代码,我创建了一个小型库来帮助您。

要设置配置,只需将提供的代码从/config/Notification.php复制到您的app/Config/Notification.php,并不要忘记更改命名空间。

class Notification extends BaseConfig
{
    public $settings = [
        'mailtype' => 'html',
        'protocol' => 'smtp',
        'smtp_host' => '',
        'smtp_user' => '',
        'smtp_pass' => '',
        'smtp_port' => '587',
        'smtp_timeout' => '15',
    ];
    public $from = [
        'email' => 'noreply@site.com',
        'name' => 'noreply',
    ];
    public $bcc = '';
}

然后,要使用此库,就像这样简单

$notification = new \Toolkit\Libraries\Notification();
$data = [
    'to' => 'destionation@email.com',
    'subject' => 'Your subject',
    'message' => 'Your message, this can be a view too',
];
$notification->send($data);

工具包中的提供助手

此工具包提供了一套可以在应用程序中使用的助手,这可能是此项目增长最快的部分之一。

数组助手

加载数组助手

helper('\Toolkit\array');

数组展平

将多维数组转换为单维数组。

$newArray = array_flatten($array);

数组平均值

返回数字数组中的平均值。

$avgArray = avg_array($array);

Calc助手

加载Calc助手

helper('\Toolkit\calc');

转换为百分比

根据另一个值获取百分比值。示例:1是34的多少百分比?

$slice = 1;
$cake = 34;

echo convertToPercent($slice, $cake);
// Output 3

但是还有一个可以设置的第三个参数,它提供了四舍五入的值,如下所示

$slice = 1;
$cake = 34;
echo convertToPercent(1, 34, 2);
// output 2.94

Calc逆转换

假设您需要计算逆值中的百分比。因此,您的最高分是0,最低分是200。值越接近0,百分比越高。如果值高于200,则0是您的得分。

$maxScore = 0;
$minScore = 200;
$score 100;
echo calcInverted($maxScore, $minScore, $score);
// outputs 100

日期助手

加载日期助手

helper('\Toolkit\date');

将日期转换为新的格式

$date = '20-10-2020';
$format = 'Y-m-d H:i:s';
echo validateDate($date, $format)
// Outputs 20-10-2020 00:00:00

错误助手

加载错误助手

helper('\Toolkit\error');

显示404错误

show_404();

字符串助手

加载字符串助手

helper('\Toolkit\string');

获取随机字符串

echo getRandomString(10);
// Outputs a random string with lenght of 10

将字符串从拉丁字符翻译为相应的非拉丁字符

因此,基本上所有如:Áãà的字符都将转换为“a”。这在处理URL并希望从URL中删除这些字符时非常有用。

$string = 'Cão';
echo transliterateString($string);
// outputs "Cao"

十进制数字

这将把任何整数转换为十进制。所以3可以是3.00,甚至3.000

echo decimal_number(3, 2);
// Outputs 3.00

向上取整和向下取整一个值

echo round_up(4.5, 3);
// Output 5.000
echo round_down(4.5, 3);
// Output 4.000