Laravel по-русски

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

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

#1 22.04.2015 18:47:10

ktulchonok
Откуда: Одесса
Сообщений: 7

Проблема с обновлением записи

Недавно начал работать с laravel и  c php в целом. Понимаю что здесь нет экстрасенсов, но можете выложить хотя бы свои догадки.

Проблема заключается в том, что при попытке внести изменения в существующую запись в БД, получаю 403 ошибку Access forbidden!
Понимаю, что ошибка заключена в ограничение доступа к данным. Но ни имею понятия, где эти ограничения прописаны.

Не в сети

#2 22.04.2015 19:10:24

Re: Проблема с обновлением записи

Возможно неправильно настроили локальный сервер. Может laravel неправильно установили. Может папку public не обозначили в настройках сервера в качестве корня сайта.

Не в сети

#3 22.04.2015 19:20:30

ktulchonok
Откуда: Одесса
Сообщений: 7

Re: Проблема с обновлением записи

Добавление, вывод и удаление записей прекрасно работают, а вот изменение записи приводит к ошибке.

Не в сети

#4 22.04.2015 19:26:53

Alex1234

Re: Проблема с обновлением записи

Код покажите?

#5 22.04.2015 19:38:08

Re: Проблема с обновлением записи

ktulchonok, может вы через middleware доступ к действию закрыли?

Не в сети

#6 22.04.2015 19:46:54

ktulchonok
Откуда: Одесса
Сообщений: 7

Re: Проблема с обновлением записи

В контроллере:

public function processRequest($id) {
        $id = (int) $id;
        $data = Input::all();
        $rules = [
            'shipping_costs' => 'required',
            'comments' => 'required'
        ];
        $val = Validator::make($data, $rules);
        if($val -> fails()) {
            $errors = $val -> messages() -> toArray();
            return redirect()->back()->withInput()->with('errors', $errors);
        }
        Request::process($id, $data);
        return Redirect::to('newrequests');
    }

и в моделе:

public static function process($id, $data) {
        try {
            $request = Request::where('id', '=', $id)
                ->update([
                    'shipping_costs' => $data['shipping_costs'],
                    'comments' => $data['comments'],
                    'processed' => true
                ]);
        } catch (Exception $ex) {
            return $ex;
        }
        return $request;        
    }

Не в сети

#7 22.04.2015 19:59:20

ktulchonok
Откуда: Одесса
Сообщений: 7

Re: Проблема с обновлением записи

Middleware не трогал. Имеются только стандартные

Не в сети

#8 23.04.2015 06:26:40

Re: Проблема с обновлением записи

А в маршрутах как прописан доступ к processRequest?

Не в сети

#9 23.04.2015 06:31:17

Re: Проблема с обновлением записи

И на будущее:
Вот так делать не надо:
PHP$id = (int) $id;
Лучше в маршрутах шаблон для ID укажите. Его глобально можно указать.
Вот так тоже не надо:
PHP$errors $val -> messages() -> toArray();
Достаточно передавать в метод «withErrors» объект Validator’а.

Не в сети

#10 23.04.2015 06:48:30

ktulchonok
Откуда: Одесса
Сообщений: 7

Re: Проблема с обновлением записи

Дмитрий, спасибо, буду знать.
А насчет middleware. Я их не трогал. Как я понимаю, они фильтруют заданные запросы. Я в начале грешил на стандартные, но их удаление не повлияло на проблему.

Не в сети

#11 23.04.2015 08:01:43

Re: Проблема с обновлением записи

Повторю вопрос: ☺
А в маршрутах как прописан доступ к processRequest?

Не в сети

#12 23.04.2015 09:06:39

ktulchonok
Откуда: Одесса
Сообщений: 7

Re: Проблема с обновлением записи

Никак не прописан. Как я сказал, я новичок в этом. Надо было что-то прописывать? Чего же тогда удаление и добавление работают нормально?

Не в сети

#13 23.04.2015 09:57:39

Re: Проблема с обновлением записи

А документация для кого? Для профессионалов, что-ли?
Содержимое файла app/Http/routes.php покажите.

Не в сети

#14 23.04.2015 11:16:39

ktulchonok
Откуда: Одесса
Сообщений: 7

Re: Проблема с обновлением записи

Документацию читал, но она, имхо, очень скудная.

<?php
Route::get('/', 'PageController@index');
Route::get('index', 'PageController@index');
Route::get('post{id}','PostController@getPost');
Route::get('about', 'PageController@about');
Route::get('calculator', 'PageController@calculator');
Route::get('china', 'PageController@china');
Route::get('contacts', 'PageController@contacts');
Route::get('services', 'PageController@services');
Route::get('turkey', 'PageController@turkey');
Route::get('admin', 'PageController@admin');
Route::get('registration', 'UserController@registration');
Route::get('logout', function() { Auth::logout(); return Redirect::to('admin'); });
Route::get('request', function() { return View('request'); });
Route::get('req_{id}', 'RequestController@getRequest');
Route::get('archive', 'PostController@archive');
Route::get('user_{login}','UserController@getUser');
Route::get('deluser_{login}', 'UserController@delUser');
Route::get('newpost', function() { return View('newpost'); });
Route::get('newrequests', 'RequestController@getAllNew');
Route::get('allrequests', 'RequestController@getAll');
Route::get('delpost_{id}', 'PostController@delPost');
Route::get('newreq_{id}', 'RequestController@getNew');

Route::post('post', 'PostController@addPost');
Route::post('login', 'UserController@login');
Route::post('registration', 'UserController@register');
Route::post('request', 'RequestController@addRequest');
Route::post('changePassword_{login}', 'UserController@changePassword');
Route::post('processRequest', 'RequestController@processRequest');

Route::controllers([
	'auth' => 'Auth\AuthController',
	'password' => 'Auth\PasswordController',
]);

Не в сети

#15 23.04.2015 12:04:11

Re: Проблема с обновлением записи

  1. Документацию читал, но она, имхо, очень скудная.

Вполне ёмкая. По крайней мере для Ваших задач её вполне хватает. А остальное можно узнать, прочитав документацию к классам, которые интересуют.
Ну вот, у Вас же маршруты созданы. А говорите «почему добавление/изменение работает?». Оно и работает потому, что маршруты есть. Хотя и к этому действию тоже есть:
PHPRoute::post('processRequest''RequestController@processRequest');
Тут всё правильно. Видимо в middleware искать причину надо.

Не в сети

#16 23.04.2015 16:08:59

Re: Проблема с обновлением записи

Привет по кускам кода трудно четко что-то сказать, но что вижу у тебя:
1) в роуте

Route::post('processRequest', 'RequestController@processRequest');

а в контроллере

public function processRequest($id) {...}

$id он не найдет т.к. ты в роуте не указал т.е. вот так надо было бы

$router->pattern('id', '[0-9]+');
Route::post('processRequest/{id}', 'RequestController@processRequest');

а так в тех кусках что ты прислал много чего некорректного вот к примеру посмотри https://laracasts.com/series/laravel-5-from-scratch
там много полезного на этом сайте и очень доходчево

Не в сети

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