2016-11-16 102 views
0

感谢您的阅读。 我是新的Laravel,我想尝试改变数据库的输出与@foreach刀片,还有就是例子:如何使用@foreach中的函数 - Laravel

这是路线:

Route::get('/home', '[email protected]'); 

这是控制器:

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 

与输出是"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项目功能?请帮助我..

+0

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

+0

你的wordlimit函数在哪里?您可能可以像平常一样使用该功能,具体取决于功能。 – aynber

回答

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 }} 

希望这有助于!

+0

你真的应该尽量避免在你的模型中放置相关的逻辑视图(格式化),否则你最终会得到一些非常庞大的模型。 – Devon

+0

我知道,但它也不是坏的方式,就好像我们没有找到'str_limit'这样的逻辑我们也可以使用它。它只是Laravel的方式来解决复杂的事情,并使代码可读并且保持 –

+0

The Laravel的方式涉及问题的分离。如果正在使用mutators来显示格式,这将被违反。在我看来,像这样设置字符串限制在视图的上下文中才有意义。 – Devon

0

你可以把你的函数放在helpers.php文件中来自libraries文件夹。 只要确保你有composer.json文件自动加载helpers.php文件:

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

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

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

相关问题