Laravel по-русски

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

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

#1 Re: Laravel 5.x » Как получить название элемента по его id, который указан в другой табл » 16.12.2016 00:25:36

Androbim пишет:

Вы документацию принципиально читать не желаете?

smile Я почитал соответствующие разделы но полюбому чета не доходило.

Но уже разобрался. Спасибо Вам!

#2 Re: Laravel 5.x » Как получить название элемента по его id, который указан в другой табл » 15.12.2016 12:54:18

Androbim пишет:

Через этот самый динамический атрибут tournament модели Event

$tournament = Event::find(1)->tournament;

Ок. А как вывести данные из переменной $tournament?

В таблице турниров есть поле name_ru, как мне вывести значение этого поле  с помощью $tournament?

#3 Laravel 5.x » Как получить название элемента по его id, который указан в другой табл » 13.12.2016 15:50:30

sergiu920
Ответов: 6

Приветствую!

Есть две таблицы. Одна называется events(события) и другая tournaments(турниры). В таблице events есть поле tournament_id в которой хранится id турнира.

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

Сейчас, метод( из модели Event ) getAll(), имеет код ' return $this->all(); ' и он просто возвращает список событий как есть. При выводе {{ $event->tournament_id }} я получаю id турнира, но мне нужно чтобы вместо id вывелось само название турнира из таблицы tournaments.

Подскажите пожалуйста как это сделать ?

В модель Event добавил метод tournament:

public function tournament(){
        return $this->hasOne('App\Tournament');
    }

Но, как использовать этот метод для каждого выводимого события ?

#4 Re: Laravel 5.x » Аутентификация через Ajax - сохранение пользователя в сессию » 07.12.2016 12:34:53

covobo пишет:

И убедись что работает middleware

    \Illuminate\Session\Middleware\StartSession::class,

А как убедиться что он работает ?

#5 Re: Laravel 5.x » Аутентификация через Ajax - сохранение пользователя в сессию » 07.12.2016 12:34:03

covobo пишет:
sergiu920 пишет:

Но, в таком случае после пару обновлений страницы метод Auth::check() выдает false.

Что значит после пары обновлений Auth::check() выдаёт false?
Либо в логике приложения где-то ошибка, либо сессия умирает - конфиг session.lifetime

Auth::check() выдаёт false, значит что пользователь не залогинен. То есть после того как пользовтаель аутенифицировался, то после пару обновлений страниц его аутентификация исчезает и ему опять нужно аутентифицироваться.

У  session.lifetime стоит значение 120

#6 Laravel 5.x » Аутентификация через Ajax - сохранение пользователя в сессию » 01.12.2016 13:54:32

sergiu920
Ответов: 4

Приветствую всех! Я реализовал аутенификацию пользователя через Ajax, но проблема в том что после пару обновлений страницы, пользователя автоматически выбрасывает из аутентификации.

Тоесть пользователь вводит данные, они проходят валидацию и проходят проверку  Auth::attempt. Пользователь зарегистрирован в БД и вводимые данные верны. Но я не понимаю как сохранить его в сессий( или как это делается правильно через Ajax ).

Вот код метода login который обрабатывает данные формы авторизации, отправленные через ajax:
public function login(Request $request)
    {   
        $inputData = $request->all();
        $email = $inputData['email_auth'];
        $password = $inputData['pass_auth'];

        //Валидация
        $validator = Validator::make(
                array(
                    'email' => $email,
                    'password' => $password,
                ),
                array(
                    'email' => 'required|email|max:250',
                    'password' => 'required|min:6',
                ),

                array(
                    'email.required' => '<p class="error">Введите Ваш E-mail</p>',
                    'email.max' => '<p class="error">Слишком длинный e-mail</p>',
                    'email.email' => '<p class="error">Неправильный формат e-mail</p>',
                    'password.required' => '<p class="error">Введите Ваш пароль</p>',
                    'password.min' => '<p class="error">Короткий пароль</p>',
                )
            );

        if($validator->fails()){
            return response()->json([
                    'fail' => true,
                    'errors' => $validator->getMessageBag()->toArray()
                ]);
        }else{
   
            // If the class is using the ThrottlesLogins trait, we can automatically throttle
            // the login attempts for this application. We'll key this by the username and
            // the IP address of the client making these requests into this application.
            $throttles = $this->isUsingThrottlesLoginsTrait();
           
            if(Auth::attempt(['email' => $email, 'password' => $password])){

                if(Auth::attempt(['email' => $email, 'password' => $password, 'status' => 1])){
                   
                    //=========== Аутентификация прошла успешно ============
                    $throttles = $this->isUsingThrottlesLoginsTrait();

                    if ($throttles && $lockedOut = $this->hasTooManyLoginAttempts($request)) {
                        $this->fireLockoutEvent($request);

                        return $this->sendLockoutResponse($request);
                    }

                    $credentials = $this->getCredentials($request);

                    if (Auth::guard($this->getGuard())->attempt($credentials, $request->has('remember'))) {
                        return $this->handleUserWasAuthenticated($request, $throttles);
                    }

                    // If the login attempt was unsuccessful we will increment the number of attempts
                    // to login and redirect the user back to the login form. Of course, when this
                    // user surpasses their maximum number of attempts they will get locked out.
                    if ($throttles && ! $lockedOut) {
                        $this->incrementLoginAttempts($request);
                    }
                   
                    //Возвращаем результат
                    return response()->json([
                            'success' => true,
                            'throttles' => $throttles,
                            'email' =>  $email,
                        ]);
                }else{
                    return response()->json([
                            'fail' => true,
                            'errors' => ['<p class="error">Вы еще не подтвердили свой E-mail</p>']
                        ]);
                }

            }else{
                return response()->json([
                        'fail' => true,
                        'errors' => ['<p class="error">Неверный E-mail и/или пароль</p>']
                    ]);
            }
        }
    }

Но, в таком случае после пару обновлений страницы метод Auth::check() выдает false.

В общем вопрос такой: Как сохранить пользователя при аутентификации через Ajax ?

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