У меня есть страница с формой для пользователя, связывающего сертификаты с типами регистрации конференции.
Пользователь должен выбрать тип регистрации в радиокнопке, записать содержимое в текстовое поле ввода и затем нажать «Сохранить».
Приведенный ниже код работает, но есть проблема. Каждый раз, когда пользователь щелкает тип регистрации, записывает некоторый контент в текстовую область и нажимает «Сохранить» на вкладке registration_types, столбец «certificate_id» обновляется с помощью созданного идентификатора сертификата, это правильно. Но проблема в том, что всегда создается новая запись сертификата в базе данных, и это не кажется правильным, потому что пользователь только связывает и обновляет сертификат с типом регистрации.
Вы знаете, как правильно обращаться с этим контекстом?
<form id = "edit_registration_types" method = "post"
action = "{{route('certificates.store', ['conference_id' => $conference->id])}}" enctype = "multipart/form-data">
{{csrf_field()}}
<div class = "form-row">
<div class = "form-group col">
<label>Certificate</label>
@foreach($registrationType as $rtype)
<div class = "form-check">
<input
{{ (old('radiobutton') && old('radiobutton') == $rtype->id) ? 'checked' : '' }}
class = "form-check-input radio" type = "radio" name = "radiobutton"
value = "{{ $rtype->id }}" id = "{{$rtype->id}}">
<label class = "form-check-label" for = "exampleRadios1">
Certificate for the registration type "{{$rtype->name}}"
</label>
</div>
@endforeach
</div>
</div>
<div class = "form-group">
<label for = "exampleFormControlTextarea1">Configure the certificate for the selected registration type</label>
<textarea class = "form-control" name = "certificate_content" id = "" rows = "3">{{ old('certificate_content') }}</textarea>
</div>
<button class = "btn-outline-primary btn">Save equal for all registration types</button>
<input type = "submit" class = "btn btn-primary btn" value = "Save"/>
</form>
CertificatesController:
class CertificateController extends Controller
{
public function create($id){
$conference = Conference::find($id);
$registrationType = RegistrationType::where('conference_id', $id)->get();
return view('certificates.index')->with('conference', $conference)->with('registrationType', $registrationType);
}
public function store(Request $request){
$this->validate($request, [
'certificate_content' => 'required'
]);
$certificate = Certificate::create([
'content' => $request->certificate_content,
]);
$registrationTypeToUpdate = RegistrationType::find($request->radiobutton);
$registrationTypeToUpdate->certificate_id = $certificate->id;
$registrationTypeToUpdate->save();
Session::flash('success','Certificate updated');
return redirect()->back();
}
}
Спасибо, но, например, если в db еще нет сертификатов, и пользователь щелкает тип регистрации (переключатель) и вводит некоторый контент в текстовое поле, необходимо создать запись в таблице сертификатов с идентификатором и содержимым, а также необходимо обновить регистрационный тип "certificate_id". Тогда что необходимо показать на странице сертификатов, когда выбран переключатель определенного типа регистрации, показывать в текстовом поле сохраненное содержимое сертификата этого типа регистрации, и в этом вводе текстового поля есть идентификатор сертификата?
тогда вам нужно установить certificate_id в скрытом поле, если пользователь просто обновляет его, и когда пользователь публикует, опубликуйте certificate_id и найдите сертификат с этим идентификатором. если запись найдена, тогда нет необходимости создавать запись, просто обновите ее содержимое и используйте этот идентификатор в типе регистрации
Спасибо, но я не понимаю, как отличить, обновляет пользователь или нет. Поскольку нет страницы для создания сертификата, на странице есть только переключатели (каждый переключатель соответствует существующему типу регистрации), и пользователь может только выбрать переключатель, соответствующий типу регистрации, ввести некоторый контент и щелкнуть " Сохранить ».






вам нужен идентификатор сертификата в скрытом поле формы или в URL-адресе вашего почтового запроса и, используя этот идентификатор сертификата, получите сертификат и обновите его