laravel 刀片模板变量

Posted

技术标签:

【中文标题】laravel 刀片模板变量【英文标题】:laravel blade template variables 【发布时间】:2014-12-08 18:17:33 【问题描述】:

在使用 laravel 刀片模板时,管理输出变量的认可方法是什么?

例如,我正在制作一个视图,显示每个农民即将完成的家务/任务。数据透视表包含任务的 due_at 日期时间字段,我想根据项目是否过期、已完成等更改项目的类别。

@foreach ($farmer->tasks as $task)
    @if ($task->pivot->due_at) < date(now))
        $style = 'alert alert-danger';
    @elseif ($task->pivot->due_at) > date(now))
        $style = 'alert alert-success';
    @else
        $style = '';
    @endif
    <div class="list-group-item  $style ">$task->name <span class="glyphicon glyphicon-calendar">  $task->pivot->due_at </span> <span class="glyphicon glyphicon-pencil"></span><span class="glyphicon glyphicon-trash"></span></div>
@endforeach 

此示例引发错误:Undefined variable: style (View: /home/vagrant/Code/app/views/farmers/show.blade.php)

我没有看到一种明显的方法来执行简单的代码块来设置变量,就像我在“普通”PHP 视图中所做的那样,通过在 @987654324 上进行一些基本计算来定义要应用于任务项的类@值。

是否应该将此逻辑移至辅助函数或其他东西?

【问题讨论】:

【参考方案1】:

假设due_at 是一个时间戳

@foreach ($farmer->tasks as $task)
    @if (Carbon::parse($task->pivot->due_at) < Carbon::now())
        <?php $style = 'alert alert-danger'; ?>
    @elseif (Carbon::parse($task->pivot->due_at) > Carbon::now())
        <?php $style = 'alert alert-success'; ?>
    @else
        <?php $style = ''; ?>
    @endif
    <div class="list-group-item  $style ">$task->name <span class="glyphicon glyphicon-calendar">  $task->pivot->due_at </span> <span class="glyphicon glyphicon-pencil"></span><span class="glyphicon glyphicon-trash"></span></div>
@endforeach 

【讨论】:

打印 $style = 'alert alert-danger';在 html 输出中。您不能在刀片模板中声明和使用该变量。 在我的例子中,它在 HTML 输出中打印$style = 'alert alert-danger'; 代码。你能运行你的代码吗? @user101289 请关注this: @PHPWeblineindia 有测试过吗?我想你不知道这是工作。 尽管在模板中声明的变量是不可取的。我将取消我的反对票。但是@user101289 你真的应该遵循this 只在模板中使用变量。【参考方案2】:

@Anam 你的回答有效,但我会使用以下方法。

@user101289 假设您有默认布局并且它产生内容部分。因此,要声明和使用变量,我建议您在内部模板文件中使用 vars 部分,并在顶部一次声明所有变量。然后使用它。因为我们不会产生vars 部分,所以它不会打印它。

这将帮助您跟踪使用的变量及其在顶部声明所有变量并在程序的其余部分使用的标准方法:

@extends('layouts.default') /* Your default layout template file. */
@section("vars")
   $yourVar = 'Your value' 
@endsection
@section("content") /* The content section which we will print */
    // Your other HTML and FORM code and you can use variables defined in **vars** section
@endsection
@stop

【讨论】:

谢谢,但是当我需要声明的变量位于 foreach 块中时,我不明白这是如何工作的。我认为在控制器中也没有一种优雅的方式来处理这个问题,因为我仍然需要在控制器中执行foreach,然后将整个修改后的数组传递给视图。 @extends('layouts.default') 是您正在扩展的默认布局。 @section("content") 中的代码将会产生。因此,最好创建一个不会打印的新部分@section("vars"),并将变量声明放在该区域中。是的,有时需要在模板文件中定义变量以打印相关任务。 哦,我明白你在说什么了。谢谢! @user101289 如果对您有帮助,请标记为正确并投票! 我会尽快测试它。谢谢。

以上是关于laravel 刀片模板变量的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.2:如何在刀片模板中设置变量,没有 php 标签?

Laravel 刀片模板,URL::to 中的 foreach 变量?

laravel 刀片模板中的覆盖部分抛出未定义的变量错误

如何在Laravel刀片模板中设置变量

我们如何在 laravel php 刀片模板中为 foreach 循环定义循环变量

在 Laravel 中将刀片的变量大写