是否可以比较 Session::get('key') 值并使用 laravel 内联 if else 语句进行比较?

Is it possible to compare Session::get('key') value and compare it using laravel inline if else statement?

我想做的是过滤单选按钮。当用户根据特定年份应用过滤器时,它会进入控制器以根据该年份过滤数据结果,然后 return 返回到具有新值的视图。但是页面刷新时,反映的是按年份过滤的值,只是单选按钮没有勾选,默认全部 单选按钮已选中。

我所做的是根据单击哪个单选按钮的值将单选按钮的 ID 存储在控制器的会话中。如果单选按钮的 ID 与存储在会话中的 ID 匹配,则应检查该单选按钮。

Index.blade.php

<label>
  <input type="radio" name="year" id="tab" value="_all" class="flat-red filter" checked="checked"> All
</label>

@foreach ($years as $year)
  <label>
      <input type="radio" name="year" id="id{{$year->year}}" value="{{ $year->year }}" class="flat-red filter" checked = {{ Session::get('radio') == "id{{$year->year}}" ? 'checked' : 'false' }}> {{$year->year}}
  </label>
@endforeach

<button type="submit" class="btn btn-primary btn-sm pull-right">Apply Filter</button>

StatisticsController.php

session(['radio' => 'id'.request('year')]);
return view('statistics.index', $counts, compact('years'));

我得到的错误

syntax error, unexpected ')', expecting :: (T_PAAMAYIM_NEKUDOTAYIM)

我试过的方法, 1.用JS查看哪个单选按钮被点击并保存到本地session

我做错了什么或错过了什么?

一种解决方案是读取控制器中的 session 变量并将其注入到模板中。

不要在模板中放入更多逻辑,这不是模板引擎的用途 - 更好地解耦此类逻辑。这有助于您保持代码的可维护性。 blade 模板不需要了解 session

的任何信息

{{ }} 内的所有内容都是 PHP。 {{ }} 被 Blade 编译器替换为如下内容:

<?php echo e(...); ?>

所以基本上只是在 {{ }}:

之间使用常规 PHP 语法
{{ Session::get('radio') == "id{$year->year}" ? 'checked' : 'false' }}

{{ }} 中包含 {{ }} 会破坏 echo 语句的编译。