Как правильно обрабатывать этот контекст, чтобы связать сертификаты с типами регистрации?

У меня есть страница с формой для пользователя, связывающего сертификаты с типами регистрации конференции.

Пользователь должен выбрать тип регистрации в радиокнопке, записать содержимое в текстовое поле ввода и затем нажать «Сохранить».

Приведенный ниже код работает, но есть проблема. Каждый раз, когда пользователь щелкает тип регистрации, записывает некоторый контент в текстовую область и нажимает «Сохранить» на вкладке 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();

    }
}

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

rkj 27.06.2018 17:13

Спасибо, но, например, если в db еще нет сертификатов, и пользователь щелкает тип регистрации (переключатель) и вводит некоторый контент в текстовое поле, необходимо создать запись в таблице сертификатов с идентификатором и содержимым, а также необходимо обновить регистрационный тип "certificate_id". Тогда что необходимо показать на странице сертификатов, когда выбран переключатель определенного типа регистрации, показывать в текстовом поле сохраненное содержимое сертификата этого типа регистрации, и в этом вводе текстового поля есть идентификатор сертификата?

user9977616 27.06.2018 17:19

тогда вам нужно установить certificate_id в скрытом поле, если пользователь просто обновляет его, и когда пользователь публикует, опубликуйте certificate_id и найдите сертификат с этим идентификатором. если запись найдена, тогда нет необходимости создавать запись, просто обновите ее содержимое и используйте этот идентификатор в типе регистрации

rkj 27.06.2018 17:24

Спасибо, но я не понимаю, как отличить, обновляет пользователь или нет. Поскольку нет страницы для создания сертификата, на странице есть только переключатели (каждый переключатель соответствует существующему типу регистрации), и пользователь может только выбрать переключатель, соответствующий типу регистрации, ввести некоторый контент и щелкнуть " Сохранить ».

user9977616 27.06.2018 17:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
20
0

Другие вопросы по теме