定制 clock-it/base 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

clock-it/base

Composer 安装命令:

composer require clock-it/base

包简介

clock-it base source

README 文档

README

Baseの設定

0 . composer install

1. php artisan vendor:publish

configを反映

config/base.phpを作成

default : DataSources
envに設定すれば配置ディレクトリを変更可能
設定値 : DATASOURCE_PATH

2. php artisan make:database テーブル名

共通テーブルのmigrationファイルおよびSeederの作成
(現状、都道府県マスタのみ対応)

※src/Databases内に用意されているものだけ作成可能

3. php artisan make:model モデル名 -y -i

モデル作成

-y : リポジトリ作成
-i : インターフェイス作成

4.RepositoryServiceProviderを追加(手動)

作成した各RepositoryとInterfaceをbindする

-y -i
どちらもオプションに記載した場合は自動で追加される方法あり

<参考> app/Providers/RepositoryServiceProvider.php

<?php
namespace App\Providers;

use App\DataSources\MRoles\Repositories\MRoleRepository;
use App\DataSources\MRoles\Interfaces\MRoleRepositoryInterface;
use App\DataSources\TUsers\Repositories\TUserRepository;
use App\DataSources\TUsers\Interfaces\TUserRepositoryInterface;
use Illuminate\Support\ServiceProvider;

class RepositoryServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind(
            TUserRepositoryInterface::class,
            TUserRepository::class
        );

        $this->app->bind(
            MRoleRepositoryInterface::class,
            MRoleRepository::class
        );
    }
}

その他

リポジトリのみ作成
$ php artisan make:repository モデル名

インターフェースのみ作成
$ php artisan make:interface モデル名

Baseロジック

通常のCRUDは用意されている
各Repositoryでは、特殊な操作のみを追加する
(Interfaceも同様)

各モデルでは、where条件やrelationの設定のみが基本
DB操作自体は各Repositoryに記載

基本記述

<参考(適当です)>
app/DataSources/Repositories/TUserRepository.php

<?php

namespace App\DataSources\TUsers\Repositories;

use Clock\Baserepo\Repositories\BaseRepository;
use App\DataSources\TUsers\TUser;
use App\DataSources\TUsers\Interfaces\TUserRepositoryInterface;

class TUserRepository extends BaseRepository implements TUserRepositoryInterface
{
    /**
     * TUserRepository constructor.
     *
     * @param TUser $tUser
     */
    public function __construct(TUser $tUser)
    {
        parent::__construct($tUser);
        $this->model = $tUser;
    }

    /**
     * ユーザーリスト取得
     *
     * @param array $columns
     * @param int $limit
     * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator|mixed
     */
    public function getUserList($columns = ['*'], int $limit = 15)
    {
        return $this->model->with('roles')->select($columns)->paginate($limit);
    }

    /**
     * アカウント作成
     *
     * @param array $params
     * @return TUser
     * @throws \Exception
     */
    public function createAccount(array $params) : TUser
    {
        try {
            $data = collect($params)->except('password')->all();

            $tUser = new TUser($data);
            $tUser->password = bcrypt($params['password']);

            $tUser->save();

            return $tUser;
        } catch (\Exception $e) {
            throw new \Exception($e->getMessage(), 500, $e);
        }
    }
}

app/DataSources/Requests/CreateTUserRequest.php

<?php

namespace App\DataSources\TUsers\Requests;

use Clock\Baserepo\Requests\BaseFormRequest;
use Illuminate\Validation\Rule;

class CreateTUserRequest extends BaseFormRequest
{
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules() : array
    {
        return [
            'name' => ['required', 'string', 'max:50'],
            'email' => ['required', 'string', 'email', 'max:191', 'unique:t_users'],
            'password' => ['required', 'string', 'min:6'],
            'role_id' => ['required', 'numeric', Rule::exists('m_roles', 'id')],
        ];
    }

    /**
     * Get custom messages for validator errors.
     *
     * @return array
     */
    public function messages() : array
    {
        return [
            'name.required' => '氏名は必須です。',
            'name.max' => '氏名は50文字まで入力可能です。',
            'email.required' => 'メールアドレスは必須です。',
            'email.email' => 'メールアドレス形式で入力して下さい。',
            'email.max' => 'メールアドレスは191文字以内で入力して下さい。',
            'email.unique' => 'そのメールアドレスはすでに使われています。',
            'password.required' => 'パスワードは必須です。',
            'password.min' => 'パスワードは6文字以上で入力して下さい。',
            'role_id.required' => '権限を設定してください。',
            'role_id.exists' => '権限設定が不正です。',
        ];
    }
}

app/Http/Controllers/UserController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\RedirectResponse;
use App\DataSources\TUsers\Requests\CreateTUserRequest;
use App\DataSources\TUsers\Interfaces\TUserRepositoryInterface;

class UserController extends Controller
{
    /**
     * @var
     */
    private $tUserRepo;

    /**
     * UserController constructor.
     *
     * @param TUserRepositoryInterface $tUserRepo
     */
    public function __construct(TUserRepositoryInterface $tUserRepo)
    {
        $this->middleware('auth');

        $this->tUserRepo = $tUserRepo;
    }

    /**
     * アカウント管理
     *
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function index()
    {
        $users = $this->tUserRepo->getUserList();

        return view('user.index', [
            'users' => $users,
        ]);
    }

    /**
     * アカウント登録
     *
     * @param CreateTUserRequest $request
     * @return RedirectResponse
     */
    public function store(CreateTUserRequest $request) : RedirectResponse
    {
        $this->tUserRepo->createAccount($request->except('_method', '_token'));
        session()->flash('status', __('アカウント登録が完了しました'));

        return redirect()->route('users.index');
    }
}

clock-it/base 适用场景与选型建议

clock-it/base 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 63 次下载、GitHub Stars 达 0, 最近一次更新时间为 2020 年 01 月 06 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 clock-it/base 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 clock-it/base 我们能提供哪些服务?
定制开发 / 二次开发

基于 clock-it/base 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 63
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 5
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2020-01-06