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

Не трябва да добавяте ключ за потвърждение в таблицата на потребителите, но това е вашата db таблица, можете да вмъкнете всичко навсякъде, но моето предложение е да създадете отделна таблица за това.

person Khan Shahrukh    schedule 17.06.2015
comment
Здравейте. Много полезни коментари. Научих за MVC и все още свиквам с Laravel и се опитвам да се насиля да науча отново начина, по който съм свикнал да правя нещата. Май остарявам... - person Eamorr; 17.06.2015
comment
Гледахте ли видеоклипове на Джефри Уей? ако не потърсете laracasts в google - person Khan Shahrukh; 17.06.2015
comment
хей, @Eamorr, съжалявам за неуместния коментар, но как върви вашето MVC обучение? - person Khan Shahrukh; 24.04.2017