Laravel generateurl函数

时间:2015-08-04 10:10:40

标签: php laravel

我有这段代码:

<td><a href="http://example.com/forum/{{ $forum->seo_name }}/{{ $forum->id }}">{{ $forum->name }}</a></td>

我不想用

{!! generateForumLink($forum->seo_name, $forum->id) !!}

我该怎么办?

我在控制器中创建了简单的功能:

public function generateForumURL($name, $id)
{
    return "http://localhost/".$name."/".$id;
}

我怎样才能将它用作模板?也许存在更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:3)

方法1:创建助手

我通常在helpers.php文件夹中创建一个app文件,并将其添加到composer.json的自动加载部分:

"autoload": {
    "classmap": [
        ...
    ],
    "psr-4": {
        "App\\": "app/"
    },
    "files": [
        "app/helpers.php" // Add this file
    ]
},

helpers.php中,按如下方式添加功能:

function generateForumURL($name, $id)
{
    // Using the url() helper, so you don't have to manually switch between
    // localhost and the production website name
    return url($name . "/" . $id);
}

当你完成时,不要忘记运行composer dump-autoload

方法2:Defining an accessor

另一种方法是简单地向getUrlAttribute模型添加Forum,返回网址:

class Forum extends Eloquent {

    ...

    public function getUrlAttribute()
    {
        return url($this->name . '/' . $this->id);
    }

}

现在,您可以在任意位置使用$forum->url作为字符串。

使用链接模板

您可以将模板保存为视图(我通常在partials文件夹中保存)并将其包含在您需要的任何位置:

档案views/forums/partials/link.blade.php

@if(isset($forum))
    <a href="{{ $forum->url }}">{{ $forum->name }}</a>
@endif

将其包含在另一个视图中,如下所示:

@include('forums.partials.link', ['forum' => $forum])