按下我的发送按钮时,它会发出错误 -
这是我的路线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);
}
}
}
答案 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上调用一个方法。
在该行之前查看并查看它(应该是)定义的位置,并确保将其设置为应该的位置!