clock-it / base
clock-it base 源代码
v2.03
2020-06-19 03:50 UTC
Requires
- php: ^7.2
- laravel/framework: ^6.0
Requires (Dev)
- orchestra/testbench: ^4.3
- phpunit/phpunit: ^8.4
This package is auto-updated.
Last update: 2024-09-29 05:29:40 UTC
README
Base的配置
0. composer install
1. php artisan vendor:publish
反映config配置
创建config/base.php
默认: 数据源
通过env设置可以更改配置目录
设置值: DATASOURCE_PATH
2. php artisan make:database 表名
创建公共表的迁移文件和Seeder
(目前仅支持都道府县主数据)
※仅能创建src/Databases内已有的文件
3. php artisan make:model 模型名 -y -i
创建模型
-y:创建仓库
-i:创建接口
4. 添加RepositoryServiceProvider(手动)
将创建的各Repository和Interface进行绑定
-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中仅添加特殊操作
(接口同样)
各模型中,仅基本设置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');
}
}