입력표 설치가 힘들다면
자기소개
프로 프로그래머는 약 반년, PHP는 약 반년을 겪었고 라벨의 존재는 입사 전에 알았던 새끼 프로그래머였다.제가 Qiita에 투고한 것은 이번이 처음입니다.따뜻한 눈으로 볼 수 있다면 좋겠다.
배경
회사의 서비스가 사용하는 프레임워크가 라벨이기 때문에 어떤 입력 형식을 이식하기로 했다.'프로젝트 수도 적고 그렇게 오래 걸리지는 않겠지'라고 생각하다가 의외로 귀찮은 일을 발견하고 다양한 기법을 조합해 겨우 해냈다.
이 보도는 그 요약판이다.(실제로 더 고전하거나 턴진한의 설치)
규격
회사의 서비스가 사용하는 프레임워크가 라벨이기 때문에 어떤 입력 형식을 이식하기로 했다.'프로젝트 수도 적고 그렇게 오래 걸리지는 않겠지'라고 생각하다가 의외로 귀찮은 일을 발견하고 다양한 기법을 조합해 겨우 해냈다.
이 보도는 그 요약판이다.(실제로 더 고전하거나 턴진한의 설치)
규격
<input type="hidden">
내용 유지 금지(대책 왜곡 등)어떻게 실시합니까
tableX 정보 가져오기
우선 다음과 같은 느낌을 썼다.(라우팅 및 중간부품 생략)
App\User.php// ...
public function tableX(): HasOne
{
return $this->hasOne('App\TableX', 'userno')
}
// ...
App\Http\Controllers\SomeformController.phpClass SomeformController extends Controller
{
public function edit()
{
$tableX = Auth::user()->tableX();
return view('someform.edit', ['tableX' => $tableX]);
}
}
resources\views\someform\edit.blade.php{{-- ... --}}
<form method="..." action="...">
@csrf
<div>
<h4>項目A</h4>
<input name="item_a" value="{{ $tableX->item_a }}" />
</div>
{{-- ... --}}
<input type="submit" name="confirm" value="確認する" />
</form>
{{-- ... --}}
이렇게 설치한 결과...ErrorException (E_ERROR)
Trying to get property 'item_a' of non-object
안전
원인도 위에 적혀 있다…が、存在しないこともある
.아래와 같이 개작하여 없앴다.
resources\views\someform\edit.blade.php {{-- ... --}}
<input name="item_a" value="{{ $tableX->item_a ?? '' }}"/>
{{-- ... --}}
시$tableX
은null
, 통상적인 곳에 $tableX->item_a
쓰면 Trying to get property 'b' of non-object
나타나지만 null합체산자??
의 왼쪽에 쓰면 isset
때처럼 잘 처리될 것 같다.
확인 화면에 입력 값 표시
상당히 고전했던 기억이 나지만 결국 다음과 같은 동작을 취했다.
App\Http\Controllers\SomeformController.php// ...
public function confirm(Request $request)
{
$request->flash();
return view('someform.confirm');
}
// ...
resources\views\someform\confirm.blade.php<div>
<div>
<h4>項目A</h4>
<div>{{ old('item_a') }}</div>
</div>
{{-- ... --}}
<form method="..." action="...">
@csrf
<input type="submit" name="submit" value="保存"/>
</form>
<form method="..." action="...">
<input type="submit" name="back" value="戻る">
</form>
</div>
old()
과$request->flash()
의사용법은잘 이해되지 않는것 같은데...
확인 화면에서 반환할 때 입력 값을 지우지 않음
이 코드의 경우 반환 버튼을 눌렀을 때 입력한 값이 재설정됩니다
나는 이곳도 최적해를 찾는 데 오랜 시간이 걸렸던 것을 기억하지만, 결국은 아래의 글을 통해 해결되었다.
resources\views\someform\edit.blade.php{{-- ... --}}
<input name="item_a" value="{{ old('item_a', $tableX->item_a ?? '') }}"/>
{{-- ... --}}
저장 처리 구현
여기에 쓴 후 저장 처리만 설치하면 쉽게 승리할 수 있습니다!
App\Http\Controllers\SomeformController.php// ...
public function submit()
{
$tableX = Auth::user()->tableX;
$tableX->fill(old())->save();
return redirect('...');
}
// ...
Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR)
Call to a member function fill() on null
원인도 처음에 나타났다…が、存在しないこともある
.
결국 다음과 같은 내용을 써서 해결했다.
App\Http\Controllers\SomeformController.php// ...
public function submit()
{
$tableX = TableX::firstOrNew(['userno' => Auth::user()->id]);
$tableX->fill(old())->save();
return redirect('...');
}
// ...
"TableX
표와 User
표는 관련이 있기 때문에 User
모델의 대상에서...TableX
대상의 생각을 고집하면 무의미한 복잡한 코드가 된다.(실제가 되었다.)
끝내다
본문에서 말한 바와 같이 완성되기 전에 상당히 고전했다.완성되기 전에 무의식중에 복잡하고 긴 코드가 되어 때로는 "라벨이 귀찮아"하기도 한다.그러나 보도에서 라벨은 firstOrNew
함수 등 번잡한 설명을 없애는 도구를 준비했다.이런 도구를 능숙하게 사용할 수 있도록 앞으로도 배우고 싶다.
여기까지 읽어주셔서 감사합니다.
Reference
이 문제에 관하여(입력표 설치가 힘들다면), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/daisei-yoshino/items/e741ad0d1648ab0745f1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// ...
public function tableX(): HasOne
{
return $this->hasOne('App\TableX', 'userno')
}
// ...
Class SomeformController extends Controller
{
public function edit()
{
$tableX = Auth::user()->tableX();
return view('someform.edit', ['tableX' => $tableX]);
}
}
{{-- ... --}}
<form method="..." action="...">
@csrf
<div>
<h4>項目A</h4>
<input name="item_a" value="{{ $tableX->item_a }}" />
</div>
{{-- ... --}}
<input type="submit" name="confirm" value="確認する" />
</form>
{{-- ... --}}
ErrorException (E_ERROR)
Trying to get property 'item_a' of non-object
{{-- ... --}}
<input name="item_a" value="{{ $tableX->item_a ?? '' }}"/>
{{-- ... --}}
// ...
public function confirm(Request $request)
{
$request->flash();
return view('someform.confirm');
}
// ...
<div>
<div>
<h4>項目A</h4>
<div>{{ old('item_a') }}</div>
</div>
{{-- ... --}}
<form method="..." action="...">
@csrf
<input type="submit" name="submit" value="保存"/>
</form>
<form method="..." action="...">
<input type="submit" name="back" value="戻る">
</form>
</div>
{{-- ... --}}
<input name="item_a" value="{{ old('item_a', $tableX->item_a ?? '') }}"/>
{{-- ... --}}
// ...
public function submit()
{
$tableX = Auth::user()->tableX;
$tableX->fill(old())->save();
return redirect('...');
}
// ...
Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_ERROR)
Call to a member function fill() on null
// ...
public function submit()
{
$tableX = TableX::firstOrNew(['userno' => Auth::user()->id]);
$tableX->fill(old())->save();
return redirect('...');
}
// ...
본문에서 말한 바와 같이 완성되기 전에 상당히 고전했다.완성되기 전에 무의식중에 복잡하고 긴 코드가 되어 때로는 "라벨이 귀찮아"하기도 한다.그러나 보도에서 라벨은
firstOrNew
함수 등 번잡한 설명을 없애는 도구를 준비했다.이런 도구를 능숙하게 사용할 수 있도록 앞으로도 배우고 싶다.여기까지 읽어주셔서 감사합니다.
Reference
이 문제에 관하여(입력표 설치가 힘들다면), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/daisei-yoshino/items/e741ad0d1648ab0745f1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)