Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Вопрос снимаю, сам дурак))
Нашел - я неправильно понял валидацию size - там должно быть ровно 16 символов
Как указать валидатору, что мне требуется строка В ПРЕДЕЛАХ 16 символов?
between?
форма:
<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, дабы проверить работает ли он, но он не срабатывает - т.е. до этого места не доходит вообще
После удаления лишней ; ошибка перестала вылетать, но работать как надо все равно не хочет - бился долго, не врубаюсь в чем проблема.
При отправке формы выдает 302 код (POST запрос).
При этом метод store контроллера не отрабатывает вообще (в самое начало метода вписывал функции-хелперы - никакой реакции). Данные на сервер улетают нормально (судя по отчету из браузера), а в ответ тишина - лишь перезагружается форма, которую отправлял.
Метод index контроллера отрабатывает нормально и отображает форму.
Данные отправляются валидные - буквенно-цифровой логин, пароль с подтверждением, мыло и чекбокс (согласен с правилами) + csrf-токен
302й ответ это нормально или нет? Мне кажется, что нет...
В какую сторону копать?
Благодарю за помощь, нашел проблему - досадная опечатка - точка с запятой в правилах валидации затесалась...
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Package manifest generated successfully.
На проблему не повлияло.
Создал класс командой php artisan make:request RegisterRequest,
заполнил его правилами валидации, в контроллере прописал
public function store(\App\Http\Requests\RegisterRequest $request)//метод обрабатывает прилетающий POST от юзера
{...}
пытался уже и полное имя класса указывать и сокращенное и c использованием use (в начале файла) и без - все равно мне выдает ошибку
Class App\Http\Requests\RegisterRequest does not exist
Файл есть. Путь правильный.
В чем может быть загвоздка?
AlexeyMezenin, убедили спасибо. Сам склонялся к тому, что экономлю на спичках, но иногда стремление к чрезмерно оптимизации берет верх...
Еще раз всем спасибо!
Благодарю всех ответивших!
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();
Заранее благодарю за помощь.
Приветствую всех!
Если вопрос поднимался - киньте ссылку, пожалуйста, не смог найти.
Есть метод increment(), позволяющий увеличить значение ячейки в БД на N.
У меня в записи в БД требуется увеличить на 1 значение 2 столбцов сразу.
Делать 2 запроса (2 последовательных инкремента) не хочется - глупо как-то.
Как можно это реализовать одним запросом к базе средствами Laravel?
Страницы 1