krgm.so-manager-dev.com/app/Http/Controllers/Admin/CityController.php
你的名字 1d5db12a27
All checks were successful
Deploy main / deploy (push) Successful in 24s
【市区マスタ】新規、編集画面修正
2025-10-08 22:45:23 +09:00

174 lines
6.5 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\DB;
use App\Models\City;
class CityController extends Controller
{
public function list(Request $request)
{
$sort = $request->input('sort', 'city_id');
$sortType = $request->input('sort_type', 'asc');
$page = $request->get('page', 1);
$query = City::query();
if ($request->filled('city_name')) {
$query->where('city_name', 'like', '%' . $request->input('city_name') . '%');
}
// 排序处理
if (!empty($sort)) {
$query->orderBy($sort, $sortType);
}
$list = $query->paginate(20);
// 页码越界处理
if ($list->total() > 0 && $page > $list->lastPage()) {
return redirect()->route('city', [
'sort' => $sort,
'sort_type' => $sortType,
]);
}
return view('admin.CityMaster.list', [
'isMethodPost' => $request->isMethod('post'),
'sort' => $sort,
'sort_type' => $sortType,
'list' => $list,
'page' => $page,
]);
}
public function add(Request $request)
{
$inputs = [
'city_name' => '',
'print_layout' => '',
'city_user' => '',
'city_remarks' => '',
];
if ($request->isMethod('POST')) {
$rules = [
'city_name' => ['required', 'string', 'max:10', 'regex:/^[^ -~。-゚]+$/u'],
'print_layout' => ['required', 'string', 'max:10', 'regex:/^[^ -~。-゚]+$/u'],
'city_user' => ['required', 'string', 'max:10', 'regex:/^[^ -~。-゚]+$/u'],
'city_remarks' => ['nullable', 'string', 'max:20'],
];
$messages = [
'city_name.required' => '市区名は必須です。',
'city_name.regex' => '市区名は全角で入力してください。',
'print_layout.required' => '印字レイアウトファイルは必須です。',
'print_layout.regex' => '印字レイアウトファイルは全角で入力してください。',
'city_user.required' => '顧客M入力不要フィールドIDは必須です。',
'city_user.regex' => '顧客M入力不要フィールドIDは全角で入力してください。',
'city_remarks.max' => '備考は20文字以内で入力してください。',
];
$validator = Validator::make($request->all(), $rules, $messages);
$inputs = array_merge($inputs, $request->all());
if (!$validator->fails()) {
$maxId = DB::table('city')->max('city_id');
$newCityId = $maxId ? $maxId + 1 : 1;
$city = new City();
$city->city_id = $newCityId;
$city->fill($request->only([
'city_name',
'print_layout',
'city_user',
'city_remarks',
]));
if ($city->save()) {
$request->session()->flash('success', __('登録に成功しました'));
return redirect()->route('city');
} else {
$request->session()->flash('error', __('登録に失敗しました'));
}
} else {
$inputs['errorMsg'] = $validator->errors()->all();
}
}
return view('admin.CityMaster.add', $inputs);
}
public function edit(Request $request, $pk, $view = '')
{
$city = City::find($pk);
if (!$city) {
abort(404);
}
if ($request->isMethod('POST')) {
$rules = [
'city_name' => ['required', 'string', 'max:10', 'regex:/^[^ -~。-゚]+$/u'],
'print_layout' => ['required', 'string', 'max:10', 'regex:/^[^ -~。-゚]+$/u'],
'city_user' => ['required', 'string', 'max:10', 'regex:/^[^ -~。-゚]+$/u'],
'city_remarks' => ['nullable', 'string', 'max:20'],
];
$messages = [
'city_name.required' => '市区名は必須です。',
'city_name.regex' => '市区名は全角で入力してください。',
'print_layout.required' => '印字レイアウトファイルは必須です。',
'print_layout.regex' => '印字レイアウトファイルは全角で入力してください。',
'city_user.required' => '顧客M入力不要フィールドIDは必須です。',
'city_user.regex' => '顧客M入力不要フィールドIDは全角で入力してください。',
'city_remarks.max' => '備考は20文字以内で入力してください。',
];
$validator = Validator::make($request->all(), $rules, $messages);
if (!$validator->fails()) {
$city->fill($request->only([
'city_name',
'print_layout',
'city_user',
'city_remarks',
]));
if ($city->save()) {
$request->session()->flash('success', __('更新に成功しました'));
return redirect()->route('city');
} else {
$request->session()->flash('error', __('更新に失敗しました'));
}
} else {
return view('admin.CityMaster.edit', [
'city' => $city,
'errorMsg' => $validator->errors()->all(),
]);
}
}
return view($view ?: 'admin.CityMaster.edit', [
'city' => $city,
]);
}
public function info(Request $request, $pk)
{
return $this->edit($request, $pk, 'CityMaster.info');
}
public function delete(Request $request)
{
$arr_pk = $request->get('pk');
if (!$arr_pk) {
return redirect()->route('city')->with('error', __('削除する市区を選択してください。'));
}
if (City::destroy($arr_pk)) {
return redirect()->route('city')->with('success', __("削除が完了しました。"));
} else {
return redirect()->route('city')->with('error', __('削除に失敗しました。'));
}
}
}