Php 在Laravel Blade中使用{{Str::limit}}帮助程序类时出错
我正在使用Laravel6.5构建一个应用程序,它是从Laravel5.7升级而来的 我有一个字段,它使用Blade语法从DB中提取文本并显示前50个字符:Php 在Laravel Blade中使用{{Str::limit}}帮助程序类时出错,php,laravel,laravel-blade,Php,Laravel,Laravel Blade,我正在使用Laravel6.5构建一个应用程序,它是从Laravel5.7升级而来的 我有一个字段,它使用Blade语法从DB中提取文本并显示前50个字符: ... {{ Str::limit($someValue->value, 50) }} // This worked ... {{ Str::limit($someOtherValue->value, 50) }} // This gave error message ... 当我访问这个页面时 ErrorException
...
{{ Str::limit($someValue->value, 50) }} // This worked
...
{{ Str::limit($someOtherValue->value, 50) }} // This gave error message
...
当我访问这个页面时
ErrorException (E_ERROR)
Class 'Str' not found
原始代码使用了帮助器类str_limit()。
因此,当我接管这个项目并升级Laravel时,我将代码更新到上面的版本
根据我的理解,Str::limit()
是一个全局帮助器类,不需要声明任何外观或添加别名就可以工作。上述代码工作的事实部分证明了这一点
我实施了一个工作修复:
...
{{ Str::limit($someValue->value, 50) }} // This worked
...
{{ \Illuminate\Support\Str::limit($someOtherValue->value, 50) }} // This now works
...
虽然我有一个工作补丁,但代码的丑陋伤害了我的眼睛,让我发疯,不知道为什么只有一个有效??我的门楣和括号突出显示告诉我没有丢失的标签。我还复制了相同的代码并应用于每个组合中,只是第二个Str::limit()
不起作用
有人能告诉我为什么会这样吗?谢谢大家! 我建议您使用Mutator。当您修改数据库中的数据时,这是一种很好的方法。不要把你的刀片锉弄得乱七八糟
******* Model ********
use Illuminate\Support\Str;
public function getSomeFieldAttribute($value)
{
return str_limit($value, 50);
}
注意:someField是要限制的列 在控制器中,您可以使用如下代码
use Illuminate\Support\Str;
然后
例如:-
$limit_string = Str::limit('This is just an example', 5);
在视图文件中,如果要使用
{{\Illuminate\Support\Str::limit('This is just an example',5)}}
无法将facade扩展到刀片文件。如果您想使用str,那么您必须定义一个路径并使用此处限制的helper函数
arr和str是全局函数,但在laravel 5.8中,他们不推荐使用此函数,因此如果您想使用此str或arr助手,则必须使用
照亮\Support\Str(Str)并使用照亮\Support\Arr(Arr)执行操作。好的,我解决了我的问题
...
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
helper函数只有在config/app.php
中声明Str
的别名并清除缓存后才能工作:php artisan视图:clear
&php artisan配置:clear
'aliases' => [
'App' => Illuminate\Support\Facades\App::class,
'Artisan' => Illuminate\Support\Facades\Artisan::class,
'Auth' => Illuminate\Support\Facades\Auth::class,
'Blade' => Illuminate\Support\Facades\Blade::class,
...
'Str' => Illuminate\Support\Str::class
]
非常感谢所有在这里提供帮助的人 如果config/app.php
中有Str
的别名,则可以将其当作根命名空间中的别名使用。。。没有很好的理由说明为什么您不能多次在同一文件中以相同的方式引用该类。我已将别名添加到config/app.php
中,就像这样'Str'=>illumb\Support\Str::class,
但它仍然没有work@lagbox啊,对。您完全正确,必须声明别名。它最初对我不起作用,因为我没有清除缓存。运行php artisan视图后:清除和config:clear
。不确定哪一个是缓存,但在开发过程中清除更多缓存并没有什么坏处。非常感谢。如果在config/app.php
中添加了别名,则需要清除配置缓存(如果已缓存)。。。缓存存储本身不需要清除。终于成功了!:)@如果我的回答有用的话。请将其标记为绿色。您给出了一个很好的建议,但实际上您并没有回答我的问题。我不太确定是否可以将facade扩展到刀片文件中。但是,可以在alias{}
下的config/app.php
中为它们创建别名。清除缓存以直接使用帮助程序,而不必键入完整路径。是的,这是另一种方法。可以用作别名并在项目中使用