【问题标题】:How to Use Function inside @foreach - Laravel如何在 @foreach 中使用函数 - Laravel
【发布时间】:2017-03-30 19:57:31
【问题描述】:

感谢阅读。 我是 Laravel 的新手,我想尝试使用 @foreach 刀片更改数据库的输出,示例如下:

这是路线:

Route::get('/home', 'warnajati@index');

这是控制器:

public function index()
{
    $post = DB::table('posts')->get();
    return view('warnajati', ['posts'=>$post]);
}

这是视图:

 @foreach ($posts as $post)
   <div class="title"><h3>{{$post->title}}</h3></div>
 @endforeach

$post-&gt;title 的输出是 "This is The Looonger Title you ever know" , 我想用我制作的Wordlimit() 函数使标题更短:

function wordlimit($text, $limit=10)
{
    if (strlen($text)>$limit) {
        # code...
        $word = mb_substr($text,0,$limit-3)."...";
    }else{
        $word =$text;
    }
};

我必须如何以及在哪里将该功能放置在 laravel 项目中?请帮帮我..

【问题讨论】:

标签: php laravel laravel-5 foreach blade


【解决方案1】:

您可以将您的函数放在库文件夹中的 helpers.php 文件中。 只需确保您在 composer.json 文件中自动加载了 helpers.php 文件:

"autoload": {
    "files": [
        "libraries/helpers.php"
    ],
},

如果您必须将其添加到您的 composer.json,您还必须从终端运行 composer dump-autoload 命令。

欲了解更多信息,请查看Best practices for custom helpers on Laravel 5

【讨论】:

    【解决方案2】:

    您可以在模型中使用 Laravel's Accessor 来执行此操作:

    <?php
    
    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Post extends Model
    {
        public function getShortTitleAttribute($value)
        {
            // return shortened title here ...
        }
    }
    

    然后你可以像这样在刀片中使用它:

    {{ $post->short_title }}
    

    希望这会有所帮助!

    【讨论】:

    • 你真的应该尽量避免将视图(格式化)相关的逻辑放在你的模型中,否则你最终会得到一些非常庞大的模型。
    • 我知道,但这也不是坏方法,好像我们找不到像 str_limit 这样的逻辑,我们也可以使用它......它只是解决复杂问题的 Laravel 方式并制作代码可读性强
    • Laravel 的方式涉及关注点分离。如果将突变器用于显示格式,这将被违反。在我看来,像这样设置字符串限制只在视图的上下文中才有意义。
    【解决方案3】:

    你的函数没有返回值... Laravel 已经有了这个函数:http://laravel.com/docs/5.3/helpers#method-str-limit

     @foreach ($posts as $post)
       <div class="title"><h3>{{ str_limit($post->title, 10) }}</h3></div>
     @endforeach
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 2018-09-12
      • 1970-01-01
      相关资源
      最近更新 更多