簡體   English   中英

在laravel 5.4中調用null上的成員函數name()

[英]Call to a member function name() on null in laravel 5.4

當按下我的發送按鈕時,它發出如下錯誤:

在此處輸入圖片說明

這是我的路線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);
        }
    }
}

資源路由的名稱應不同:

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

您無法命名資源。 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');

查看web.php第28行。

無論您認為具有name()方法的任何對象都尚未設置,因此您嘗試在null上調用方法。

查看該行之前的內容,查看它的定義位置(應該被定義),並確保將其設置為應該的位置!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM