burakcantemizel/yii2-fdcys

Yii2 公司部门员工管理系统模块

安装: 7

依赖: 0

建议者: 0

安全: 0

星级: 0

关注者: 2

分支: 0

开放问题: 0

类型:yii2-extension

dev-master 2021-01-20 12:27 UTC

This package is not auto-updated.

Last update: 2024-09-26 06:52:43 UTC


README

公司-部门-员工管理系统模块

By Burak Can Temizel 180202024

关于

通过此模块,您可以创建公司,为这些公司创建相关部门,并在部门下存储员工的详细信息。该模块是互联网编程课程的应用。在后面的部分将提供更详细的信息。

安装

模块安装将通过 vagrant 和 yii2-advanced 模板进行说明。首先,您需要在 vagrant 上完成 yii2-advanced 的安装。

使用 ssh 或 vagrant ssh 命令进入 vagrant 上的项目主目录。(例如 /var/www/advanced)

composer require --prefer-dist burakcantemizel/yii2-fdcys "dev-master"

使用以下命令通过 packagist 安装模块。

之后,打开项目主目录中 backend/config/main.php 文件进行编辑。按照以下方式进行编辑。

'modules' => [
    ...
    'fdcys' => [
        'class' => 'burakcantemizel\\fdcys\Module',
    ],
],

重要提示:这里有一个重要点,“\f”是特殊字符,因此斜杠是作为转义字符输入的,请注意这一点。

如果在使用 Composer 安装时遇到问题,您可以在项目主目录中创建 vendor/burakcantemizel 文件夹并克隆 git 仓库。

为了使模块能够运行,最后需要执行迁移操作。

在 vagrant 上通过 ssh 连接至项目主目录时,需要运行下面的命令。

php yii migrate/up --migrationPath=@vendor/burakcantemizel/yii2-fdcys/src/migrations

现在迁移操作已经完成。模块已准备就绪。

要测试模块,请访问浏览器中的 siteAdress/backend/web/index.php?r=fdcys 地址。您将看到模块的主页。

模块介绍和项目报告

本部分将展示模块内容、课程实践等,并对一些部分进行概述。

迁移

模块中已创建了 3 个表格,并使用外键建立了表格间的关系,对主键进行了索引。存在 3 个表格:公司、部门和员工。表格间的关系如下所示。使用了 3 个外键。

在创建模型时将使用这些关系图。

Gii、模型和 CRUD

根据每个表格通过 Gii 创建模型时定义的关系特性,创建了模型。根据关系,每个模型都有不同的单数和复数 activeQuery 方法。例如,对于部门表;

     /**
     * Gets query for [[Calisanlars]].
     *
     * @return \yii\db\ActiveQuery
     */
    public function getCalisanlars()
    {
        return $this->hasMany(Calisanlar::className(), ['departmanlar_departman_id' => 'departman_id']);
    }

    /**
     * Gets query for [[FirmalarFirma]].
     *
     * @return \yii\db\ActiveQuery
     */
    public function getFirmalarFirma()
    {
        return $this->hasOne(Firmalar::className(), ['firma_id' => 'firmalar_firma_id']);
    }

然后使用 Gii 通过这些模型创建基本功能,控制器和视图已生成。然后进行必要的调整,将表格连接起来。

表单

对表单进行了各种调整。例如,对于员工 _form.php,关系 id 列按照以下方式进行了调整。使用 ArrayHelper、DropDownList 等各种结构,使可以从相关表中根据 id 选择相应的名称。

<?= $form->field($model, 'departmanlar_departman_id')->dropDownList(
        ArrayHelper::map(Departmanlar::find()->all(),'departman_id', 'departman_adi'),
        ['prompt' => 'Departman Seçiniz']
    ) ?>

同样,在员工 index.php 中,通过调整 GridView 小部件,将关系 id 段替换为相应的名称。

 <?= GridView::widget([
        ...
            [
                'attribute' => 'departmanlar_departman_id',
                'value' => 'departmanlarDepartman.departman_adi',
            ],

            [
                'attribute' => 'firmalar_firma_id',
                'value' => 'firmalarFirma.firma_adi',
            ],
            
            ...

完成这些操作后,现在在员工表中创建新记录时,选择公司时将列出公司表中的现有公司,同样选择部门时也将列出部门表中的部门。在显示时,现在也将以 id 的名称而不是 id 显示关系。

由于表格之间存在关系,因此删除相关记录时,将删除相关联的其他记录。例如,删除部门时,该部门中所有员工的记录也将被删除。

搜索模型和查询

将列中的 id 与名称关联后,还需要在搜索模型上进行进一步的调整。因为搜索模型仍然通过 id 进行搜索,我们需要将其更改为通过名称进行搜索。以员工的搜索模型为例

    ...
        $query->joinWith('firmalarFirma');
        $query->joinWith('departmanlarDepartman');
        ...
        $query->andFilterWhere(['like', 'calisan_ad_soyad', $this->calisan_ad_soyad])
            ...
            ->andFilterWhere(['like', 'firmalar.firma_adi', $this->firmalar_firma_id])
            ->andFilterWhere(['like', 'departmanlar.departman_adi', $this->departmanlar_departman_id]);

在seach modeller中,已经添加了基于id列和名称进行搜索的功能,如上所述的查询操作。通过这种方式,表格被完全关联。

模块主页面

在Yii课程之前,我将w3.css用于创建一个简单的模块主页面,作为html和css课程的一个应用。从这里,我通过路由将用户引导到模块的不同部分。在模块内部,我放置了按钮,以便用户可以通过这些按钮返回到当前页面。此外,我还从模型中获取了当前公司、部门和员工的数量,并将它们展示给用户。

HTTP API

通过ApiController中定义的3个action,我通过HTTP获取请求来获取当前公司、部门和员工列表,并将它们以JSON格式作为响应返回。

domain/backend/web/index.php?r=fdcys/api/firmalar

domain/backend/web/index.php?r=fdcys/api/departmanlar

domain/backend/web/index.php?r=fdcys/api/calisanlar

通过向这些地址发送GET请求,可以获取即时列表。此外,在执行CRUD操作时,可以通过HTTP API按钮在浏览器中查看相关页面上的请求。以下是一个将请求发送到公司地址的Postman示例。

布局

由于项目中不需要视觉效果,因此我只展示了布局的使用。我通过覆盖模块中的yiin main layout并更改了页脚来展示布局的使用。

自定义小工具

为了展示自定义小工具的使用,我在登录页面创建了一个简单的显示“欢迎”信息的widget。

语言翻译

由于无法将language translation从yii-advanced模板的配置转移到扩展,因此messages文件夹功能无效且无法运行。

其他课程应用

如上所述,我主要介绍了所实现的应用。在Mastering Yii书籍的第1-5章中,我使用了但未提及的其他应用。您可以在项目中更详细地了解这些应用。