使用Laravel提及(at.JS和Laravel)返回用户名及其ID

时间:2016-03-04 15:17:49

标签: javascript php jquery laravel

我目前正在构建评论系统,并希望能够提及用户并标记它们,随后我希望该标记有一个指向其个人资料的链接(在此示例中,它是' s just / profile / {id})

我目前正在使用Laravel提及从我的用户模型生成自动填充列表。我这样做:

function enableMentions(elem, type, column) {

$(elem).atwho({
    at: "@",
    limit: 5,
    displayTpl: '<li><span>${name}</span></li>',
    insertTpl: '<a href="/profile/${name}" data-type="mentionable" data-id="${id}" data-name="${name}">${name}</a>',
    callbacks: {
        remoteFilter: function(query, callback) {
            if (query.length <= 1) return;

            $.getJSON("/api/mentions/" + type, {
                q: query,
                c: column
            }, function(data) {
                callback(data);
            });
        }
    }
});
}

// My api/mentions route: Route::get('/api/mentions/{type}', 'ApiController@index');

//My api controller:
    public function index($type, Request $request)
{
    try {
        $resultColumns = [];
        $query = $request->get('q');
        $column = $request->get('c');

        $model = app()->make(config('mentions.' . $type));
        $records = $model->where($column, 'LIKE', "%$query%")
            ->get();
        foreach ($records as $record) {
            $resultColumns[] = $record->$column;
        }
        return response()->json($resultColumns);
    } catch (\ReflectionException $e) {
        return response()->json('Not Found', 404);
    }
}

And finally, initializing the at.js
 <script type="text/javascript">
 $(function(){
 enableMentions("#mention-commentContent", "users", "Username");
 });
 </script>
 <div contentEditable="true" id="mention-commentContent" class="user-form" name="commentContent" type="text"></div>

我对如何修改上述内容以返回用户名和分配给他们的ID感到困惑,这样我就可以将$ {name}更改为$ {id}并将其链接到他们的个人资料,对吗?

1 个答案:

答案 0 :(得分:0)

此软件包可以帮助Laravel Mentionsthis

基本思想是通过JSON从数据库中获取用户名,以下是他们在laracasts中使用它的方式:

$("textarea#body").atwho({
            at: "@", limit: 5, callbacks: {
                remoteFilter: function (t, e) {
                    t.length <= 2 || $.getJSON("/api/users", {q: t}, function (t) {
                        e(t)
                    })
                }
            }
        })