Laravel по-русски

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

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

#1 12.03.2016 22:34:40

htclog81
Откуда: Москва
Сообщений: 192
Сайт

Помогите новичку при разработке форм

Не могу получить ошибки от валидатора

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);

и тоже ничего

Не в сети

#2 12.03.2016 23:46:29

htclog81
Откуда: Москва
Сообщений: 192
Сайт

Re: Помогите новичку при разработке форм

Попробовал переделать участок кода где проверка так:

$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" => ""
]

То есть вообще пустые поля засылаю. А ошибки нет.. Почему?

Не в сети

#3 13.03.2016 15:52:40

duster
Откуда: Мельбурн
Сообщений: 148

Re: Помогите новичку при разработке форм

Покажите целиком метод validate() в контроллере Auth?

Не в сети

#4 13.03.2016 16:11:33

htclog81
Откуда: Москва
Сообщений: 192
Сайт

Re: Помогите новичку при разработке форм

Да я уже даже другой контроллер создал и нет отдельного метода 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)

Не в сети

#5 13.03.2016 16:18:02

htclog81
Откуда: Москва
Сообщений: 192
Сайт

Re: Помогите новичку при разработке форм

ErrorException in RegistController.php line 38: Undefined property: Illuminate\Validation\Validator::$errors

это на второй вариант ругается с make

Не в сети

#6 13.03.2016 16:19:10

htclog81
Откуда: Москва
Сообщений: 192
Сайт

Re: Помогите новичку при разработке форм

Может быть проблема все же в запросе?

Форма вот такая привожу полностью

@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

Не в сети

#7 13.03.2016 19:21:01

htclog81
Откуда: Москва
Сообщений: 192
Сайт

Re: Помогите новичку при разработке форм

Ну что никто ничего не скажет... Уже хочется отказаться от использования фреймворка..
Ошибка на ровном месте в общем то.

Не в сети

#8 13.03.2016 19:40:04

htclog81
Откуда: Москва
Сообщений: 192
Сайт

Re: Помогите новичку при разработке форм

Попробовал создать форму заново на основе почти чистого примера из документации 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)

Возможно, что то не то в настройках приложения в целом?

Не в сети

#9 13.03.2016 23:42:52

htclog81
Откуда: Москва
Сообщений: 192
Сайт

Re: Помогите новичку при разработке форм

Заработало ответ тут http://stackoverflow.com/questions/3597 … how-errors

Нужен был web middleware для показа ошибок при возрате в форму.

Непонятно почему это совсем нигде не указывается в документации про валидацию.

Не в сети

#10 14.03.2016 01:27:51

Re: Помогите новичку при разработке форм

Я тоже новичек в 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)

Не в сети

#11 14.03.2016 06:31:15

duster
Откуда: Мельбурн
Сообщений: 148

Re: Помогите новичку при разработке форм

htclog81 пишет:

Нужен был web middleware для показа ошибок при возрате в форму.

Многие на это накололись при переходе на 5.2. Правда, опять же, Вы документацию от 5.1 цитируете - может в 5.2 упоминания есть?

Согласен, что недостаточно грамотно уведомили публику, но сам шаг был рациональный

Не в сети

#12 14.03.2016 19:37:45

htclog81
Откуда: Москва
Сообщений: 192
Сайт

Re: Помогите новичку при разработке форм

Да я не в той версии смотрел. Не думал, что разница столь существенна и касается именно такого момента.

Теперь другой вопрос.
Хочу разобраться с авторизацией.
В примерах вижу, что рекомендуют пользовать 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 ссылка на авторизацию/регистрацию.

Не в сети

#13 14.03.2016 19:38:42

htclog81
Откуда: Москва
Сообщений: 192
Сайт

Re: Помогите новичку при разработке форм

Скорее нахожу примеры как не пускать не авторизованного в какой то раздел.. Понятно, что может и это понадобится и пускать, но показывать что авторизован..

Изменено htclog81 (14.03.2016 19:38:53)

Не в сети

#14 14.03.2016 23:58:04

htclog81
Откуда: Москва
Сообщений: 192
Сайт

Re: Помогите новичку при разработке форм

В файербаг после авторизации вижу вот что c3cd57cfff.jpg

Не в сети

#15 15.03.2016 22:15:23

htclog81
Откуда: Москва
Сообщений: 192
Сайт

Re: Помогите новичку при разработке форм

Каким то чудесным образом все это пофиксилось..
Данные о юзере получаю в контроллере и шаблоне через Auth::user()

Не в сети

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