0

尝试在视图中使用 Str::limit 时出现此错误

  ErrorException
  Undefined property: Illuminate\Pagination\LengthAwarePaginator::$body (View: C:\Users\USER\Desktop\laravels\qna\resources\views\questions\index.blade.php)

这是代码

  <div class="media-body">
      <h3 class="mt-0">{{ $question->title }}</h3>
      {{ Str::limit($questions->body, 250) }}
  </div>

这是控制器

    namespace App\Http\Controllers;

    use App\Models\Question;
    use Illuminate\Http\Request;
    // use Illuminate\Support\Str;

    class QuestionsController extends Controller
    {
        // use Str;
        /**
        * Display a listing of the resource.
        *
        * @return \Illuminate\Http\Response
        */
        public function index()
        {
            $questions = Question::latest()->paginate(5);

            return view('questions.index', compact('questions'));
        }

    ...

    }

当“Str”未注释时,我得到了他的错误

    Symfony\Component\ErrorHandler\Error\FatalError
    App\Http\Controllers\QuestionsController cannot use Illuminate\Support\Str - it is not a trait

在视图中使用 Str:: 的正确方法是什么

4

2 回答 2

2
  1. 在你的视图中写$question->body而不是$questions->body以便使用问题对象而不是分页器。
  2. 实际上,您根本不必在控制器中使用Illuminate\Support\Str,因为您仅在视图中使用Str 类,并且它是 laravel 中的别名之一,请查看 config/app.php。

顺便说一句……上面的(use 语句)类只会缩短您必须在代码中使用的命名空间,如下所示:

use Illuminate\Support\Str;

class QuestionsController extends Controller
{ 
    public function index()
    {
        Str::limit("Some String");
    }
}

但是,如果您不使用此功能,则您的代码将是:

class QuestionsController extends Controller
{
    public function index()
    {
        \Illuminate\Support\Str::limit("Some String");
    }
}

而当我们将 use 语句放在类中时,这意味着我们正在尝试在我们的类中使用 trait

https://www.php.net/manual/en/language.oop5.traits.php

于 2021-08-01T14:33:50.773 回答
0

我认为您不需要将其添加到控制器中,因此只需添加

use Illuminate\Support\Str;

到您的模型,这应该允许您在任何地方使用它。然后在你的刀片中你可以使用

\Illuminate\Support\Str::limit($questions->body, 250)

这是一个 Laravel 解决方案,但我建议您查看此线程以获得纯 PHP 答案限制字符串长度

于 2021-08-01T14:30:15.010 回答