在Laravel Blade中使用{{Str :: limit}}辅助类时出错

时间:2019-11-14 08:52:22

标签: php laravel laravel-blade

我正在使用从Laravel 5.7升级的Laravel 6.5构建应用程序。

我有一个字段,该字段使用Blade语法从数据库中提取文本并显示前50个字符:

...
{{ Str::limit($someValue->value, 50) }} // This worked
...
{{ Str::limit($someOtherValue->value, 50) }} // This gave error message
...

访问页面时,我得到

ErrorException (E_ERROR)
Class 'Str' not found

原始代码使用了从Laravel 5.8开始不推荐使用的帮助器类str_limit()。 因此,当我接管该项目并升级Laravel时,我将代码更新为上述代码。

据我了解,Str::limit()是一个全局帮助器类,无需声明任何Facade或添加别名即可工作。以上代码部分起作用的事实证明了这一点。

我实施了一项有效的修复程序:

...
{{ Str::limit($someValue->value, 50) }} // This worked
...
{{ \Illuminate\Support\Str::limit($someOtherValue->value, 50) }} // This now works
...

尽管我有一个有效的修复程序,但是代码的丑陋使我不知所措,这使我发疯,不知道为什么,其中只有1个有效?我的短毛绒和方括号突出显示告诉我没有丢失的标签。我还复制了相同的代码并应用于每种组合,只是第二个Str::limit()无法正常工作。

有人可以告诉我为什么它会这样吗?谢谢!

3 个答案:

答案 0 :(得分:1)

我建议您使用Mutator。当您从数据库修改数据时,这是一种好方法。不要使刀片文件混乱。

c = a - b

注意 someField 是您要限制的列。

答案 1 :(得分:0)

在控制器中,您可以使用以下代码

$('#form').change(function(a) {
    mb_send_request();
}

然后

示例:-

use Illuminate\Support\Str;

如果要在View文件中使用

$limit_string = Str::limit('This is just an example', 5);

您不能将立面扩展到刀片文件。如果您想使用str,那么您已经定义了路径并使用此处限制的辅助功能。

arr str 是全局功能,但是在 laravel 5.8中,它们已弃用,因此如果您想使用这个str或arr助手,那么你必须使用 Illuminate \ Support \ Str(str)并使用Illuminate \ Support \ Arr(arr)进行操作。

答案 2 :(得分:0)

好的,我发现了我的问题。

...
if (someCondition not fulfilled) {
    {{ Str::limit($someValue->value, 50) }} // This actually didn't work but got skipped
} else {
    'Some error message' // THIS worked
...
if (someCondition fulfilled) {
    {{ Str::limit($someOtherValue->value, 50) }} // This gave error message
} else {
    'Some error message' // Skipped
...

Str帮助函数仅在Str中为config/app.php声明别名并清除缓存后才起作用:php artisan view:clear和{{1 }}

php artisan config:clear

非常感谢在这里提供帮助的每个人!