【问题标题】:Laravel: Best practice for inline PHP in a blade fileLaravel:刀片文件中内联 PHP 的最佳实践
【发布时间】:2015-06-17 11:10:09
【问题描述】:

所以我有以下刀片文件:

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

如您所见,&lt;?php ?&gt; 标记之间有一些原始 PHP。问题是 User::where(...) 失败(“FatalErrorException” - 未找到“用户”类)。

我猜这是因为我需要做一些 Laravel 导入?但是这样做是轻量级的吗?

我能问一下,在我的情况下,最佳做法是什么?我对 Laravel 还是很陌生,所以请耐心等待。像这样使用原始 PHP 是否违背了整个目的?

到目前为止,我一直在使用 Blade 模板来输出简单的变量和参数。但是我现在想做一些更复杂的事情,我遇到了麻烦。

【问题讨论】:

  • 大家好,我想我明白了...如果我使用\App\User::where('email','=',$email)-&gt;first(),它可以正常工作...
  • 为什么要在刀片文件中执行所有这些逻辑?
  • 将 php 放在模板上没有任何问题,但您直接使用 $_GET .. 不是 laravel 方式。这在视图中的语法太多了:(
  • 嗨@KhanShahrukh 你能多评论一些吗?我想我应该从我的控制器类中传入一个简单的变量,对吧?

标签: php laravel laravel-5 blade


【解决方案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);
}

您不应该将确认密钥添加到用户表中,但是您的数据库表可以在任何地方插入任何内容,但我的建议是您应该为此创建一个单独的表。

【讨论】:

  • 你好。非常有用的cmets。我已经了解了 MVC,并且仍然习惯了 Laravel,并试图强迫自己重新学习我习惯做事的方式。我想我老了……
  • 你看过 jeffrey way 的视频吗?如果不是在谷歌上搜索 laracasts
  • 嘿 @Eamorr 很抱歉发表了不相关的评论,但您的 MVC 学习进展如何?
猜你喜欢
  • 1970-01-01
  • 2015-05-04
  • 1970-01-01
  • 2011-05-27
  • 2013-02-17
  • 2023-03-24
  • 2012-09-26
  • 2018-08-26
  • 2017-08-07
相关资源
最近更新 更多