Laravel: лучшая практика для встроенного PHP в блейд-файле

Итак, у меня есть следующий файл блейда:

confirmEmail.blade.php

@extends('layouts.master')

@section('title')
{{ trans('tc.signUpConfirmTitle')}}
@endsection





@section('body')


<div class="container">
  <div class="row">
    <div class="col-lg-4">
      &nbsp;
    </div>

    <div class="col-lg-4">

      <?php
      echo $_GET['emailToken'];
      $emailToken = isset($_GET['emailToken']) ? $_GET['emailToken'] : "";
      $email = isset($_GET['email']) ? $_GET['email'] : "";

      //database lookup:
      $user = User::where('email','=',$email)->first();   //this fails...

      if($user->emailToken == $emailToken){
        echo "OK!";
      }
      ?>




      <br><br><br><br><br><br>

    </div>

    <div class="col-lg-4">
      &nbsp;
    </div>

  </div>
</div>

@endsection

Как видите, у меня есть немного сырого PHP между тегами <?php ?>. Проблема в том, что User::where(...) не работает ("FatalErrorException" - класс "Пользователь" не найден).

Я думаю, это потому, что мне нужно сделать импорт Laravel? Но делает ли это легким?

Могу ли я спросить, что было бы лучше всего в этом моем случае? Я все еще новичок в Laravel, так что терпите меня. Использование сырого PHP, как это, побеждает всю цель?

До сих пор я использовал шаблоны Blade для вывода простых переменных и параметров. Но сейчас я хочу сделать что-то более сложное, и у меня возникают проблемы.


person Eamorr    schedule 17.06.2015    source источник
comment
Привет, ребята, кажется, я понял... Если я использую \App\User::where('email','=',$email)->first(), все работает нормально...   -  person Eamorr    schedule 17.06.2015
comment
почему вы выполняете всю эту логику в своем файле лезвия?   -  person Khan Shahrukh    schedule 17.06.2015
comment
нет ничего плохого в том, чтобы поместить php в шаблон, но вы используете $_GET напрямую, а не в laravel. и это слишком много синтаксиса в представлении :(   -  person astroanu    schedule 17.06.2015
comment
Привет @KhanShahrukh Не могли бы вы прокомментировать еще немного. Думаю, мне следует передать простую переменную из моего класса контроллера, верно?   -  person Eamorr    schedule 17.06.2015


Ответы (1)


Использование сырого PHP, как это, побеждает всю цель? Точно ! MVC сделан так, что здесь будут разные уровни заданий разного типа «Модель, представление и контроллер», в вашем случае вы объединяете задание контроллера в представление и, следовательно, уменьшаете роль контроллера.

Следующий код в вашем контроллере будет делать то, что вы пытаетесь сделать. Допустим, у вас есть функция с именем подтверждение, которая отвечает за всю проверку и возвращает ответ соответственно.

public function confirmation(Request $request)
{
   $status = 'Failure';
   $emailToken = $request->emailToken;
   $email = $request->email;
   if(isset($email))
     {
       $user = User::where('email','=',$email)->first();
        //I do not know why this fails on your side check if you have that email in your database
       if($user->emailToken == $emailToken)
        {
          $status = 'Success';
        }
     }
          return view('confirmEmail')->with('message', $status);
}

Вы не должны добавлять ключ подтверждения в таблицу пользователей, однако это ваша таблица БД, вы можете вставить что угодно куда угодно, но я предлагаю вам создать для этого отдельную таблицу.

person Khan Shahrukh    schedule 17.06.2015
comment
Привет. Очень полезные комментарии. Я узнал о MVC и все еще привыкаю к ​​Laravel и пытаюсь заставить себя переучиться тому, как я привык делать вещи. Я видимо старею... - person Eamorr; 17.06.2015
comment
ты смотрел видео Джеффри Уэя? если не искать ларакасты в гугле - person Khan Shahrukh; 17.06.2015
comment
эй @Eamorr извините за неуместный комментарий, но как продвигается ваше обучение MVC? - person Khan Shahrukh; 24.04.2017