Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 17.01.2018 18:18:11

Настройка редиректа

Доброго дня всем

Есть страница с данными пользователя, попадают на нее методом POST. После обновления надо вернуться назад, но выдает ошибку. Я так думаю, что после обновления данных редирект на предыдущую страницу осуществляется уже методом GET. Подскажите, как это исправить.

Спасибо

Не в сети

#2 17.01.2018 18:36:24

Re: Настройка редиректа

Без кода не совсем понятно что происходит и как ты бы хотел, чтобы происходило.

Не в сети

#3 17.01.2018 18:43:16

Re: Настройка редиректа

Какой именно нужен код?
Вюха

                                                    {{ Form::open(['route' => ['update', 'id' => $data->id], 'method' => 'POST']) }}
                                                        <input type="hidden" name="id" value="{{ $data->id }}">
                                                        <input type="hidden" name="type" value="cha">
                                                        <div class="moto-widget-contact_form-group">
                                                            <input name="name" type="text" class="moto-widget-contact_form-field moto-widget-contact_form-input" value="{{ $data->name }}" placeholder="Имя"/>
                                                        </div>
                                                        <div class="moto-widget-contact_form-group">
                                                            <input name="address" type="text" class="moto-widget-contact_form-field moto-widget-contact_form-input" value="{{ $data->address }}" placeholder="Адрес"/>
                                                        </div>
                                                        <div class="moto-widget-contact_form-group">
                                                            <input name="city" type="text" class="moto-widget-contact_form-field moto-widget-contact_form-input" value="{{ $data->city }}" placeholder="Город"/>
                                                        </div>
                                                        <div class="moto-widget-contact_form-group">
                                                            <input name="zipcode" type="text" class="moto-widget-contact_form-field moto-widget-contact_form-input" value="{{ $data->zipcode }}" placeholder="Почтовый индекс"/>
                                                        </div>
                                                        <div class="moto-widget-contact_form-group">
                                                            <input name="phone" type="text" class="moto-widget-contact_form-field moto-widget-contact_form-input" value="{{ $data->phone }}" placeholder="Контактный телефон"/>
                                                        </div>

                                                        <div class="moto-widget-contact_form-buttons">
                                                            <div class="moto-widget moto-widget-button moto-preset-3">
                                                                <button type="submit" class="moto-widget-button-link moto-size-medium">
                                                                    <span class="fa moto-widget-theme-icon"></span>
                                                                    <span class="moto-widget-button-label">Сохранить данные</span>
                                                                </button>
                                                            </div>
                                                        </div>
                                                    {{ Form::close() }}

Контроллер

    public function update(Request $request, $id){
        
        $result = User::where('id', $id)->update(['name' => $request->name,
                                                  'address' => $request->address,
                                                  'city' => $request->city,
                                                  'zipcode' => $request->zipcode,
                                                  'phone' => $request->phone,
                            ]);
        
        if($result){
            return redirect()->back()->with('status', 'Данные успешно обновлены');
        }

Не в сети

#4 17.01.2018 18:46:36

Re: Настройка редиректа

Должно быть так. Ты заполняешь форму, посылаешь ее на сервер, данные обновляются (метод update) и тебе снова показывают форму. А у тебя как?

Не в сети

#5 17.01.2018 18:54:25

Re: Настройка редиректа

Да, все так и происходит. Но я ж говорю, что на страницу с формой я попадаю методом POST. В браузере адрес выглядит так http://auto.loc/profile?name=User. Если даже не обновляя ее вручную написать User, то будет ошибка, вот такая

    protected function methodNotAllowed(array $others)
    {
        throw new MethodNotAllowedHttpException($others);
    }
   
    public function get($method = null)
    {
        return is_null($method) ? $this->getRoutes() : Arr::get($this->routes, $method, []);
    }

Это же происходит и после обновления. Вот я и подумал про POST и GET

Не в сети

#6 17.01.2018 18:55:53

Re: Настройка редиректа

Значит тебе нужно попадать на страницу методом GET.

Не в сети

#7 17.01.2018 18:57:01

Re: Настройка редиректа

Но тогда любой юзер, подставив в адресную строку имя, сможет редактировать данные

Не в сети

#8 17.01.2018 18:58:25

Re: Настройка редиректа

Дак ты не проверяй пользователя по параметру в URI. Для этого есть посредники и политики, где ты проверяешь пользователя по auth()->user()

Не в сети

#9 17.01.2018 19:00:42

Re: Настройка редиректа

Подскажи, как это правильно сделать?

Не в сети

#10 17.01.2018 19:03:25

Re: Настройка редиректа

Правильно — создать посредника и пускать в определенную группу маршрутов только пользователя, который имеет доступ:

PHP
if ($request->userId === auth()->id()) {
    
// Пустить
}

Не в сети

#11 17.01.2018 19:21:19

Re: Настройка редиректа

Ну так все зарегенные пользователи одним маршрутом заходят

Не в сети

#12 17.01.2018 19:30:36

Re: Настройка редиректа

Ну обычно ты вообще ID пользователя никак не передаешь. У тебя есть один URI для профиля. ID пользователя получаешь через auth()->id()

Не в сети

#13 17.01.2018 19:34:23

Re: Настройка редиректа

Да, я неправильно делал - проверял по имени. Теперь разобрался, спасибо большое

Не в сети

Подвал раздела