【问题标题】:Use of undefined constant in laravel blade directive在 laravel 刀片指令中使用未定义的常量
【发布时间】:2020-08-28 04:23:36
【问题描述】:

在我的刀片中,我有

@foreach($orders as $order)
<tr>
  <td align="left" valign="top" style="padding: 5px 10px; font-size: 16px; line-height: 18px;">
@identifier_prefix($order->pickup_time)
  </td>
</tr>
@endforeach

在 AppServiceProvider 中:

public function boot()
{
  Blade::directive('identifier_prefix', function ($pickup_time) {
    $prefix = '';
    switch($pickup_time){
      case '9u - 10u30':
      $prefix = 'O';
      break;
      case '10u30 - 12u':
      $prefix = 'V';
      break;
      case '12u - 14u30':
      $prefix = 'M';
      break;
      case '14u30 - 17u':
      $prefix = 'N';
      break;
      case '17u - 19u':
      $prefix = 'A';
      break;
      default:
      $prefix = 'ERROR';
      break;
    }
    return "<?php echo $prefix; ?>";
  });
}

我收到一个错误提示

Use of undefined constant ERROR - assumed 'ERROR' (this will throw an Error in a future version of PHP)

我不是后端开发人员,所以对 php 和刀片没有太多经验。但不明白为什么我会打印错误。甚至不是默认语句中的字符串“错误”,而是一个实际错误。 另外,默认语句甚至不应该正常执行......那么这里有什么问题?

现在变得有趣了:我试图直接从指令中回显 $pickup_time

Blade::directive('identifier_prefix', function ($pickup_time) {
    $prefix = 0;
    echo $pickup_time;
    //other code

我得到 $order->pickup_time 作为字符串返回...

这怎么可能...尝试将所有内容都放在 {} 中,没有或有和 echo...尝试了所有内容...我迷路了。

【问题讨论】:

  • 您的代码中是否曾经有过$prefix = ERROR;?进行更改后您是否运行php artisan view:clear? (由于您删除了其他问题,因此无法阅读有关其他问题的任何 cmets)
  • 这个问题扩展了之前的问题,所以我删除了它。我运行 php artisan view:clear 每次我改变一些东西,$prefix 从来没有在其他任何地方使用过......
  • 把它改成简单的return $prefix;能用吗?
  • 另外,删除开关的默认语句,我得到一个“语法错误,意外';' " 指刀片文件中的@identifier_prefix($order->pickup_time)...
  • 你需要将其作为字符串回显,使用return "&lt;?php echo \"{$prefix}\" ?&gt;";

标签: laravel switch-statement laravel-blade directive


【解决方案1】:

我放弃了尝试。看起来你不能在指令中使用变量,我不敢相信...... 但是对于以后遇到这个问题的其他人:我最后只是通过写作解决了它:

@switch($order->pickup_time)
      @case('9u - 10u30')
        O
        @break
      @case('10u30 - 12u')
        V
        @break
      @case('12u - 14u30')
        M
        @break
      @case('14u30 - 17u')
        N
        @break
      @case('17u - 19u')
        A
        @break
      @default
          <span style="color: red;">Something went wrong</span>
  @endswitch

...而不是使用指令

【讨论】:

    猜你喜欢
    • 2015-10-13
    • 2023-04-09
    • 2017-06-17
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 2014-03-15
    • 2017-08-24
    相关资源
    最近更新 更多