Laravel中根据文本方向(dir)切换变量显示的问题求助
你的代码里有几个明显问题导致没达到预期效果,我给你逐个修正:
问题点说明
- Blade条件语法错误:你在
@if里嵌套了{{}},这不符合Blade语法规则——@if后直接写判断逻辑即可,不需要用{{}}包裹。另外要注意语言文件里的dir值是小写rtl还是大写RTL,判断时必须和语言文件里的取值完全一致。 - else分支未处理语言切换:第二个select的else分支仍只输出
$profession->title_ar,没有随语言切换显示对应字段,导致非选中选项不会跟着语言变化。 - 重复的name属性:两个select都用了
name="profession_id",表单提交时只会保留最后一个的值,属于冗余代码,只需保留一个处理好语言切换的select即可。
修正后的完整代码
<div class="col"> <label for="profession_id"> <i class=""></i> {{ trans('front.p2_s_prochoose') }}</label> <select class="form-control" name="profession_id"> <option value="">{{ trans('front.p2_s_allpro') }}</option> @foreach ($professions as $profession) @if ($profession->id == $profession_id) <option value="{{ $profession->id }}" selected> @if(trans('front.lng') == 'rtl') {{ $profession->title_ar }} @else {{ $profession->title }} @endif </option> @else <option value="{{ $profession->id }}"> @if(trans('front.lng') == 'rtl') {{ $profession->title_ar }} @else {{ $profession->title }} @endif </option> @endif @endforeach </select> </div>
进一步优化(简化代码)
可以把语言判断逻辑抽成变量,减少重复代码:
<div class="col"> <label for="profession_id"> <i class=""></i> {{ trans('front.p2_s_prochoose') }}</label> <select class="form-control" name="profession_id"> <option value="">{{ trans('front.p2_s_allpro') }}</option> @php $isRtl = trans('front.lng') == 'rtl'; @endphp @foreach ($professions as $profession) <option value="{{ $profession->id }}" {{ $profession->id == $profession_id ? 'selected' : '' }}> {{ $isRtl ? $profession->title_ar : $profession->title }} </option> @endforeach </select> </div>
内容的提问来源于stack exchange,提问作者Abdullah
相关产品推荐
相关产品推荐

