Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Не могу получить ошибки от валидатора
namespace App\Http\Controllers\Auth;
use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use Illuminate\Http\Request;
use Redirect;
use View;
use App\Code;
use Illuminate\Support\Facades\Mail;
use App\Http\Controllers\CodeController;
class AuthController extends Controller
{
....
public function postRegister(Request $request)
{
$validator = $this->validator($request->all());
if ($validator->fails())
{
dd($validator->errors->all());
$messages = $validator->getMessages()->all();
dd($messages);
return Redirect::to('signup')->withErrors($validator)->withInput();
//return Redirect::back()->withInput()->withErrors($validator);
}
/*
$this->validate($request, [
'email' => 'required|email|max:255|unique:users',
'password' => 'required|confirmed|min:6',
]);
*/
}
protected function validator(array $data)
{
return Validator::make($data, [
'email' => 'required|email|max:255|unique:users',
'password' => 'required|confirmed|min:6',
]);
}
}
В шаблоне
@foreach ($errors->all() as $error)
<div>{{ $error }}</div>
@endforeach
Или в шаблоне
@if (count($errors) > 0)
<div>Ой, беда!</div>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
Или просто
{{ $errors }}
Пробовал оба вариант и редиректить withErrors и то что сейчас закоментировано:
$this->validate($request, [
'email' => 'required|email|max:255|unique:users',
'password' => 'required|confirmed|min:6',
]);
В шаблоне с ошибками глухо, переменной нет. Но ошибки есть тк перекидывает обратно в шаблон, очевидно валидация срабатывает и возвращает false
В контроллере как видно в коде, пытаюсь их вывести
dd($validator->errors->all());
$messages = $validator->getMessages()->all();
dd($messages);
и тоже ничего
Не в сети
Попробовал переделать участок кода где проверка так:
$v = Validator::make($request->all(), [
'email' => 'required|email|max:255',
'password' => 'required|confirmed|min:6',
]);
if ($v->fails())
{
dd($v->errors);
}
Выдает ошибку
ErrorException in AuthController.php line 82: Undefined property: Illuminate\Validation\Validator::$errors
Если попробовать dd($v) то
Validator {#148 ▼
#translator: Translator {#146 ▶}
#presenceVerifier: DatabasePresenceVerifier {#147 ▶}
#container: Application {#2 ▶}
#failedRules: array:2 [▶]
#messages: MessageBag {#149 ▶}
#data: array:4 [▶]
#files: []
#rules: array:2 [▶]
#implicitAttributes: []
#after: []
#customMessages: []
#fallbackMessages: []
#customAttributes: []
#customValues: []
#extensions: []
#replacers: []
#sizeRules: array:4 [▶]
#numericRules: array:2 [▶]
#implicitRules: array:10 [▶]
#dependentRules: array:9 [▶]
}
То есть ошибок нет.
Показываю также input
array:4 [▼
"_token" => ""
"email" => ""
"password" => ""
"password_confirmation" => ""
]
То есть вообще пустые поля засылаю. А ошибки нет.. Почему?
Не в сети
Не в сети
Да я уже даже другой контроллер создал и нет отдельного метода validate, а только вызов. Но все тоже самое
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use View;
use Validator;
class RegistController extends Controller
{
//
public function getRegister()
{
$data = [
'title' => 'Каталог - регистрация ',
'pagetitle' => 'Каталог',
'subtitle' => 'Регистрация'
];
//dd($data);
return View::make('incs.signup', $data);
}
public function postRegister(Request $request)
{
//dd($request);
$this->validate($request, [
'email' => 'required|unique|max:255',
'password' => 'required',
]);
dd($v->errors);
}
}
другой вариант
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use View;
use Validator;
class RegistController extends Controller
{
//
public function getRegister()
{
$data = [
'title' => 'Каталог - регистрация ',
'pagetitle' => 'Каталог',
'subtitle' => 'Регистрация'
];
//dd($data);
return View::make('incs.signup', $data);
}
public function postRegister(Request $request)
{
//dd($request);
$v = Validator::make($request->all(), [
'email' => 'required|email|max:255',
'password' => 'required|confirmed|min:6',
]);
$v->fails();
dd($v->errors);
}
}
Оба варианта не работают не в шаблоне нет erorrs, не в контроллере
Изменено htclog81 (13.03.2016 16:13:24)
Не в сети
ErrorException in RegistController.php line 38: Undefined property: Illuminate\Validation\Validator::$errors
это на второй вариант ругается с make
Не в сети
Может быть проблема все же в запросе?
Форма вот такая привожу полностью
@extends('master')
@section('cont')
<h2>{{$subtitle}}</h2>
<form action="/signup/create" method="POST">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="form-group">
<label for="email">Email</label>
<input type="text" id="email" placeholder="Email" name='email'>
</div>
<div class="form-group">
<label for="password">Пароль</label>
<input type="password" id="password" placeholder="Пароль" name="password">
</div>
<div class="form-group">
<label for="confirm_password">Повторите пароль</label>
<input type="password" id="confirm_password" placeholder="Повторите пароль" name="password_confirmation">
</div>
<button type="submit" class="btn btn-default">Отправить</button>
</form>
@endsection
Не в сети
Ну что никто ничего не скажет... Уже хочется отказаться от использования фреймворка..
Ошибка на ровном месте в общем то.
Не в сети
Попробовал создать форму заново на основе почти чистого примера из документации https://laravel.com/docs/5.1/validation
Контроллер
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use View;
use Validator;
class PostController extends Controller
{
/**
* Show the form to create a new blog post.
*
* @return Response
*/
public function create()
{
return view('post.create');
}
/**
* Store a new blog post.
*
* @param Request $request
* @return Response
*/
public function store(Request $request)
{
// Validate and store the blog post...
}
}
форма
<h1>Create Post</h1>
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<html>
<head>
<title>Post form</title>
</head>
<body>
<form action="/newitem/save" method="POST">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="form-group">
<label for="title">Title</label>
<input type="text" id="title" name='title'>
</div>
<button type="submit" class="btn btn-default">Save</button>
</form>
</body>
</html>
Выдает ошибку ErrorException in c5df03aa6445eda15ddf9d4b3d08e7882dfe13e1.php line 3: Undefined variable: errors (View: /www/alexey-laravel-1/resources/views/post/create.blade.php)
Ругается на стандартную как я понимаю конструкцию вывода ошибок в форме. Еще до того как их валидатор вернул их понятно дело нет.
Но на то условие как я понимаю @if (count($errors) > 0)
Возможно, что то не то в настройках приложения в целом?
Не в сети
Заработало ответ тут http://stackoverflow.com/questions/3597 … how-errors
Нужен был web middleware для показа ошибок при возрате в форму.
Непонятно почему это совсем нигде не указывается в документации про валидацию.
Не в сети
Я тоже новичек в Laravel, но при валидации никаких middleware не использовал, у меня так валидаторы:
$validator = Validator::make(
$form,
[
'full_name' => 'required|min:8',
'phone' => 'required|min:8',
],
[
'fullName.required' => 'Поле "Фамилия, имя, отчество" обязательно для заполнения',
'fullName.min' => 'Минимальная длинна поля "Фамилия, имя, отчество" 8 символов',
]
);
if ( $validator->fails() ) {
return back()->withErrors( $validator->errors() );
}
Может у вас ошибка потому что вы пытаетесь использовать $validator->errors вместо $validator->errors()! Вам же ведь так и пишет:
Undefined property: Illuminate\Validation\Validator::$errors
Отсутствует поле $errors!
Изменено Alex_D (14.03.2016 01:28:53)
Не в сети
Нужен был web middleware для показа ошибок при возрате в форму.
Многие на это накололись при переходе на 5.2. Правда, опять же, Вы документацию от 5.1 цитируете - может в 5.2 упоминания есть?
Согласен, что недостаточно грамотно уведомили публику, но сам шаг был рациональный
Не в сети
Да я не в той версии смотрел. Не думал, что разница столь существенна и касается именно такого момента.
Теперь другой вопрос.
Хочу разобраться с авторизацией.
В примерах вижу, что рекомендуют пользовать Auth::attempt
if (Auth::attempt(array('email' => $request["email"], 'password' => $request["password"]))) {
return Redirect::to('/')->with('success', 'Вы успешно вошли на сайт');
}
Не очень понял он только проверяет верный ли логин пароль, или все же и авторизует юзера, ставит сессию...
Пробую в routes следующее
Route::group(['middleware' => ['web']], function () {
//Route::auth();
if (Auth::check()) {
$user = Auth::user();
}
dd(Auth::check());
//dd(Auth::user());
Route::get('/signup/', 'RegistController@getRegister');
Route::post('/signup/create', 'RegistController@postRegister');
Route::get('/login/', 'RegistController@getLogin');
Route::post('/login/enter', 'RegistController@postLogin');
Route::any('/', 'ItemsController@index');
Route::get('/items', 'ItemsController@index');
Route::get('/items/{itemid}', 'ItemsController@item');
Route::get('/auth/logout', function() {
Auth::logout();
return Redirect::to('login');
});
});
По идее после того как вошел Auth:attempt на любой странице меня должно распозновать, но увы Auth::check() возвращает false и user тоже пустой.
А вообще как правильно делать что бы для каждой страницы проверялось авторизован ли и если да то была глобально доступна переменная $user ну что бы скажем в шаблоне написать if ($user) Вы авторизованы как else ссылка на авторизацию/регистрацию.
Не в сети
Скорее нахожу примеры как не пускать не авторизованного в какой то раздел.. Понятно, что может и это понадобится и пускать, но показывать что авторизован..
Изменено htclog81 (14.03.2016 19:38:53)
Не в сети
В файербаг после авторизации вижу вот что
Не в сети
Каким то чудесным образом все это пофиксилось..
Данные о юзере получаю в контроллере и шаблоне через Auth::user()
Не в сети
Страницы 1