$request->isMethod('post'), 'sort' => $request->input('sort', ''), 'sort_type' => $request->input('sort_type', ''), 'page' => $request->get('page', 1), ]; $query = City::query(); if ($request->filled('city_name')) { $query->where('city_name', 'like', '%' . $request->input('city_name') . '%'); } if (!empty($inputs['sort'])) { $query->orderBy($inputs['sort'], $inputs['sort_type'] ?? 'asc'); } $inputs['list'] = $query->paginate(20); if ($inputs['list']->total() > 0 && $inputs['page'] > $inputs['list']->lastPage()) { return redirect()->route('city'); } return view('admin.CityMaster.list', $inputs); } 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', __('削除に失敗しました。')); } } }