В моем проекте Laravel 5.5 используйте редактируемое поле x-editable для редактирования поля на странице. Пользователь щелкает значение и показывает редактируемое всплывающее окно, фиксируя изменения в базе данных, когда они подтверждают (введите или щелкните значок галочки). Это работало отлично, но затем я изменил свой код маршрута, чтобы добавить параметр в URL страницы, чтобы загрузить одну или другую версию страницы в зависимости от используемого параметра. Это работает для выбора страницы, но сломало все экземпляры x-editable на загруженной странице. Теперь они прерываются с следующей ошибкой (только первая значимая первая часть отображается как дамп ошибки 200 строк)
Edit Amount
212000.00
{
"message": "",
"exception": "Symfony\\Component\\HttpKernel\\Exception\\MethodNotAllowedHttpException",
"file": "C:\\xampp\\htdocs\\DS_dev_01\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\RouteCollection.php",
"line": 255,
"trace": [
{
"file": "C:\\xampp\\htdocs\\DS_dev_01\\vendor\\laravel\\framework\\src\\Illuminate\\Routing\\RouteCollection.php",
"line": 242,
"function": "methodNotAllowed",
"class": "Illuminate\\Routing\\RouteCollection",
"type": "->"
},
...
Код x-editable на моей странице просмотра:
<a href="#" class="assetName" data-type="text" data-name="split_amount" data-url="update-investment-row" data-pk="{{ $investment_split->id }}" data-title="Edit Amount" data-value="{{$investment_split_yours}}">${{number_format($investment_split_yours)}}</a>
Мой (web.php) маршрут, который обрабатывает вызов ajax из этого всплывающего окна:
Route::post('atcv-split-scenario/update-investment-row', 'InvestmentLineSplitController@updateRow')->middleware('auth');
Код контроллера (InvestmentLineSplitController), который обрабатывает вызов update_row:
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\investment_line_split $investment_line_split
* @return \Illuminate\Http\Response
*/
public function updateRow(Request $request, investment_line_split $investment_line_split)
{
$pk = $request->input('pk');
$splitRecord = $investment_line_split::findOrFail($pk);
// get column name
$col = $request->input('name');
// get new value
$value = $request->input('value');
$splitRecord->$col = $value;
$splitRecord->save();
return \Response::json(array('status' => 1));
}
URL, который вызывает эту страницу, - http://ds_dev_01.test:8080/atcv-split-scenario/Joe%20vs%20Anne/s
, где последний параметр «S» вызывает это. До того, как я добавил последний параметр (S или M определяет, какая из двух версий страницы загружается), x-editable работала нормально, так что каким-то образом последний параметр является проблемой, но я не вижу, где мой код или маршрут неверны и как это повлияет на это. Весь приведенный выше код отлично работает без последнего параметра.
Вот закулисный JavaScript:
$(document).ready(function() {
$.fn.editable.defaults.mode = 'popup';
$.fn.editable.defaults.send = "always";
$.fn.editable.defaults.params = function (params)
{
params._token = $("#_token").data("token");
return params;
};
$.fn.editable.defaults.success = function(response, newValue)
{
//if(!response.success) return response.msg;
window.location.reload();
};
$('.assetName').editable({
ajaxOptions: {
dataType: 'json',
type: 'post'
}
});
});
Ошибка намекает на неправильный используемый метод, но я знаю, что он правильный, так как работает на странице без добавленного параметра URL. Мне нужен параметр, чтобы определить, какая страница загружается, но как я могу заставить x-editable работать с этим (и почему нет)?
Есть мысли или предложения?