在laravel 5.4中调用null上的成员函数name()

时间:2017-07-25 12:48:24

标签: php laravel-5.4

按下我的发送按钮时,它会发出错误 -

enter image description here

这是我的路线web.php轰鸣声 -

Route::group(['prefix'=>'ajax', 'as'=>'ajax::'], function() {
   Route::resource('message/send', 'MessageController@ajaxSendMessage')->name('message.new');
   Route::delete('message/delete/{id}', 'MessageController@ajaxDeleteMessage')->name('message.delete');
});

这是我的控制器MessageController.php如下:

public function ajaxSendMessage(Request $request)
{
    if ($request->ajax()) {
        $rules = [
            'message-data'=>'required',
            '_id'=>'required'
        ];

        $this->validate($request, $rules);

        $body = $request->input('message-data');
        $userId = $request->input('_id');

        if ($message = Talk::sendMessageByUserId($userId, $body)) {
            $html = view('ajax.newMessageHtml', compact('message'))->render();
            return response()->json(['status'=>'success', 'html'=>$html], 200);
        }
    }
}

3 个答案:

答案 0 :(得分:2)

资源路由的名称应不同:

Route::prefix('ajax')->group(function () {
    Route::resource('messages', 'MessageController', ['names' => [
        'create' => 'message.new',
        'destroy' => 'message.destroy',
    ]]);
});

资源路由也指向控制器,而不是特定方法。在MessageController中,您应该添加create和destroy方法。

https://laravel.com/docs/5.4/controllers#restful-naming-resource-routes

的更多信息

答案 1 :(得分:0)

您无法命名资源。 Laravel默认为其命名,如果要为所有路由命名,则必须明确指定每个路由。它应该是这样的:

Route::group(['prefix'=>'ajax', 'as'=>'ajax::'], function() {
   Route::get('message/send', 'MessageController@ajaxSendMessage')->name('message.new');
   Route::delete('message/delete/{id}', 'MessageController@ajaxDeleteMessage')->name('message.delete');
});

更新

你的另一个错误是尝试 资源 一个方法。默认情况下,Route::resource()用于映射Laravel中的所有基本CRUD路由。因此,你必须传递基本路线和类,即:

<?php
Route::resource('message', 'MessageController');

答案 2 :(得分:-1)

请看web.php第28行。

你认为有什么对象有一个name()方法,还没有设置,所以你试着在null上调用一个方法。

在该行之前查看并查看它(应该是)定义的位置,并确保将其设置为应该的位置!