Laravel по-русски

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

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

#1 Re: Laravel 5.x » FormRequest » 05.01.2018 16:52:05

Вопрос снимаю, сам дурак))
Нашел - я неправильно понял валидацию size - там должно быть ровно 16 символов

Как указать валидатору, что мне требуется строка  В ПРЕДЕЛАХ 16 символов?

between?

#2 Re: Laravel 5.x » FormRequest » 05.01.2018 16:32:42

форма:
<form action='http://localhost/project/public/register' method="POST" id="newform">
<input type="hidden" name="_token" value="ORh7Lek3iefjC4xz7txZumu4BWokPivosGjDKFHQ">
<input type="text" name="name" maxlength="16" value="">
<input type="password" name="password" maxlength="20" value="">
<input type="password" name="password_confirmation" maxlength="20" value="">
<input type="text" class="ok" name="email" maxlength="50" value="">
<input type="checkbox" name="rules">
<input type="submit" value="Зарегистрироваться">
</form>

web.php:

Route::resource('/register', 'RegisterController');

RegisterRequest.php:

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class RegisterRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name'=>'required|alpha_dash|size:16|unique:users',
            'email'=>'required|email|unique:users',
            'password'=>'confirmed',
            'rules' => 'accepted'
        ];
    }
    
    public function messages()
    {
        return [
            'required' => 'Поле :attribute нужно заполнить!',
            'alpha_dash'=>'Поле :attribute должно состоять только из латинских букв, цифр, тире и знака подчеркивания!'
        ];
    }
}
<?php

namespace App\Http\Controllers;

use \App\Http\Requests\RegisterRequest as Register;

class RegisterController extends Controller
{
    public function store(Register $request)
    {
      exit('9');
    }
}

в метод вписал exit, дабы проверить работает ли он, но он не срабатывает - т.е. до этого места не доходит вообще

#3 Re: Laravel 5.x » FormRequest » 05.01.2018 16:06:31

После удаления лишней ; ошибка перестала вылетать, но работать как надо все равно не хочет - бился долго, не врубаюсь в чем проблема.
При отправке формы выдает 302 код (POST запрос).
При этом метод store контроллера не отрабатывает вообще (в самое начало метода вписывал функции-хелперы - никакой реакции). Данные на сервер улетают нормально (судя по отчету из браузера), а в ответ тишина - лишь перезагружается форма, которую отправлял.
Метод index контроллера отрабатывает нормально и отображает форму.
Данные отправляются валидные - буквенно-цифровой логин, пароль с подтверждением, мыло и чекбокс (согласен с правилами) + csrf-токен

302й ответ это нормально или нет? Мне кажется, что нет...
В какую сторону копать?

#4 Re: Laravel 5.x » FormRequest » 05.01.2018 13:31:50

Благодарю за помощь, нашел проблему - досадная опечатка - точка с запятой в правилах валидации затесалась...

#5 Re: Laravel 5.x » FormRequest » 05.01.2018 13:27:13

Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Package manifest generated successfully.



На проблему не повлияло.

#6 Laravel 5.x » FormRequest » 05.01.2018 13:12:11

Evgnik85
Ответов: 8

Создал класс командой php artisan make:request RegisterRequest,
заполнил его правилами валидации, в контроллере прописал

public function store(\App\Http\Requests\RegisterRequest $request)//метод обрабатывает прилетающий POST от юзера
{...}

пытался уже и полное имя класса указывать и сокращенное и c использованием use (в начале файла) и без - все равно мне выдает ошибку

Class App\Http\Requests\RegisterRequest does not exist

Файл есть. Путь правильный.
В чем может быть загвоздка?

#7 Re: Laravel 5.x » increment for 2 columns » 02.01.2018 12:53:04

AlexeyMezenin, убедили спасибо. Сам склонялся к тому, что экономлю на спичках, но иногда стремление к чрезмерно оптимизации берет верх...
Еще раз всем спасибо!

#8 Re: Laravel 5.x » increment for 2 columns » 02.01.2018 12:30:52

Благодарю всех ответивших!

lodar

про триггеры думал, но хотел сделать все через php

Ocnelias

спасибо, тоже хороший вариант

AlexeyMezenin

"глупым" он мне кажется из-за лишнего запроса к базе, хотя грязный sql позволяет сделать апдейт 1 запросом.

А теперь главное - может кто-нибудь объяснить какой из 3 вариантов лучше и почему? Просто, возможно, у них есть какие-либо плюсы/минусы.

1)триггеры
2)DB::table('users')
   ->where('id', 1)
   ->update([
       'column1' => DB::raw('column1 + 1'),
       'column2' => DB::raw('column2 + 1'),
   ]);
3) increment();
increment();

Заранее благодарю за помощь.

#9 Laravel 5.x » increment for 2 columns » 01.01.2018 21:15:16

Evgnik85
Ответов: 9

Приветствую всех!
Если вопрос поднимался - киньте ссылку, пожалуйста, не смог найти.

Есть метод increment(), позволяющий увеличить значение ячейки в БД на N.
У меня в записи в БД требуется увеличить на 1 значение 2 столбцов сразу.
Делать 2 запроса (2 последовательных инкремента) не хочется - глупо как-то.

Как можно это реализовать одним запросом к базе средствами Laravel?

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