传递给Blade的Laravel单词不知何故变成了大写,没有任何解释


Laravel words passed to Blade somehow become capitalized without explanation

晚上好,我这里有一个很奇怪的问题。我在网上也找不到任何关于正在发生的事情的资源。

当我在我的控制器中使用以下内容在刀片模板中显示信息时:

$results = DB::table('datatest') -> get();
    if ($results != null) {
        return view('userview') -> with ('name', $results);
    }

它将传递到我的刀片模板中的每个单词都大写。假设我从数据库中传递整个段落,段落中每个单词的第一个字母都变成大写。

以下是我的观点:

@foreach ($name as $name)
<tr>
<td>
{!!Form::label($name -> Author)!!}
</td>
<td>
{!!Form::label($name -> Title)!!}
</td>
<td>
{!!Form::label($name -> Year)!!}
</td>
<td>
{!!Form::label($name -> Abstracts)!!}
</td>
</tr>
@endforeach

//

另一方面,当我选择用以下内容将信息传递给我的另一个模板时:

$data = DB::table('datatest')->where('id', $id)->first();
    $Author = $data -> Author;
    $Title = $data -> Title;
    $Year = $data -> Year;
    $Abstracts = $data -> Abstracts;
    $results = array('AUTHOR' => $Author, 'TITLE' => $Title, 'YEAR' => $Year, 'ABSTRACTS' => $Abstracts);
    return view('userview2') -> with ($results);

这能够将数据传递到我的刀片模板中,不会以任何方式改变单词的大写:

</tr>
<td>{!!Form::label('title', $TITLE)!!}</td>
<td>{!!Form::label('author', $AUTHOR)!!}</td>
<td>{!!Form::label('year', $YEAR)!!}</td>
<td>{!!Form::label('abstracts', $ABSTRACTS)!!}</td>
</tr>

有人也遇到过这个问题吗?如果是的话,有人能解释一下背后的原因吗?

提前感谢!

Form::label就是这样工作的。根据文档,如果你想得到不受影响的输出,你应该使用带有两个参数的标签,比如:

{!! Form::label('email', 'e-mail address') !!}

哪个输出:

<label for="email">e-mail address</label>

在你的第一个剪切中,你只传递了一个参数,Form::Label预处理了这个字符串,所以:

{!! Form::label('my email'); !!}

变成这样:

<label for="my email">My Email</label>

它的工作原理

标签生成器检查第二个参数,如果它不存在或是null,则生成器将标签$name传递给formatLabel()方法,该方法使用ucwords()将每个单词的第一个字符大写。

protected function formatLabel($name, $value)
    {
        return $value ?: ucwords(str_replace('_', ' ', $name));
    }