BadMethodCallException в строке Controller.php 103: Метод [save] не существует

55
5

Имея проблему, я не могу найти нигде в Интернете. Ошибка сообщает мне, что метод save() не завершается? Не могу понять проблему. Эти проблемы возникают при отправке формы сообщения для создания/сохранения новой задачи в контроллере.

Метод трассировки и метод ошибки следующие ->

BadMethodCallException in Controller.php line 103: Method [save] does not exist.

in Controller.php line 103
at Controller->__call('save', array()) in Task.php line 56
at Task->saveTask(object(Request))
at call_user_func_array(array(object(Task), 'saveTask'), array(object(Request))) in Controller.php line 76
at Controller->callAction('saveTask', array(object(Request))) in ControllerDispatcher.php line 146
at ControllerDispatcher->call(object(Task), object(Route), 'saveTask') in ControllerDispatcher.php line 94
at ControllerDispatcher->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
at Pipeline->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in ControllerDispatcher.php line 96
at ControllerDispatcher->callWithinStack(object(Task), object(Route), object(Request), 'saveTask') in ControllerDispatcher.php line 54
at ControllerDispatcher->dispatch(object(Route), object(Request), 'App\Http\Controllers\Task', 'saveTask') in Route.php line 174
at Route->runController(object(Request)) in Route.php line 140
at Route->run(object(Request)) in Router.php line 724
at Router->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in VerifyCsrfToken.php line 64
at VerifyCsrfToken->handle(object(Request), object(Closure))
at call_user_func_array(array(object(VerifyCsrfToken), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49
at ShareErrorsFromSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(ShareErrorsFromSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 62
at StartSession->handle(object(Request), object(Closure))
at call_user_func_array(array(object(StartSession), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure))
at call_user_func_array(array(object(AddQueuedCookiesToResponse), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in EncryptCookies.php line 59
at EncryptCookies->handle(object(Request), object(Closure))
at call_user_func_array(array(object(EncryptCookies), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Router.php line 726
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 699
at Router->dispatchToRoute(object(Request)) in Router.php line 675
at Router->dispatch(object(Request)) in Kernel.php line 246
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 124
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Kernel.php line 132
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99
at Kernel->handle(object(Request)) in index.php line 53
at require_once('D:\wamp64\organizer\public\index.php') in server.php line 21

Метод saveTask контроллера Task.php ->

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Validator;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Session as Ticket;
use Session;

class Task extends Controller
{
//

public function activateTask(\App\Task $task)
{
if($task->active == 1)
{
return redirect('/');
}
else
{
$task->active = 1;
$task->save();
if(Session('active') != null)
{
$oldtask = Ticket::find(Session('active'));
$oldtask->Task->active = 0;
$oldtask->Task->save();
$oldtask->touch();
$oldtask->save();
}
$session = new Ticket;
$session->task()->associate($task);
$session->save();
Session(['active' => $session->id]);
return redirect('/');
}
}

public function saveTask(Request $request) {

$validator = Validator::make($request->all(), [
'name' => 'required|max:255',
]);

if($validator->fails()) {
return redirect('/')->withInput()->withErrors($validator);
}

$task = new Task;
$task->name = $request->input('name');
$task->deadline = $request->input('deadline');
$task->save();
return redirect('/');
}

public function deactivateTask(\App\Task $task)
{
$task->active = 0;
$task->save();
$session = Ticket::find(Session('active'));
$session->touch();

$started = strtotime($session->created_at);
$ended = strtotime($session->updated_at);
$hours = abs(($ended - $started))/(60*60);
$session->hours = $hours;

$session->save();
Session(['active' => null]);
return redirect('/');

}

}

Маршруты ->

<?php

use App\Task;
use App\Session;

use Illuminate\Http\Request;

Route::group(['middleware' => ['web']], function () {
//

Route::get('/', function() {
$task = Task::orderBy('created_at', 'desc')->get();

return view('layouts/tasks', [
'tasks' => $task
]);

});

Route::post('/task', 'Task@saveTask');

Route::post('/task/{task}/activate', 'Task@activateTask');

Route::post('/task/{task}/deactivate', 'Task@deactivateTask');

Route::delete('/task/{task}', function (Task $task){
if($session = Session::find(Session('active')))
{
if($session->task->id == $task->id)
{
Session(['active', null]);
}
}

$task->delete();
return redirect('/');
});

});

Хотелось бы получить некоторую помощь в этом.

спросил(а) 2016-03-01T00:25:00+03:00 4 года, 4 месяца назад
1
Решение
67

У вас есть два класса с именем Task, что хорошо, поскольку они находятся в разных пространствах имен.

Во-первых, у вас есть Task модель, которая является \App\Task. Во-вторых, у вас есть контроллер Task, который является \App\Http\Controllers\Task.

В вашем контроллере задач в методе saveTask вас есть следующая строка:

$task = new Task;

Поскольку вы не указали полное имя класса, оно будет выглядеть в текущем пространстве имен для используемого класса. Поскольку вы находитесь в пространстве имен \App\Http\Controllers, он создает новый экземпляр \App\Http\Controllers\Task.

Вам необходимо изменить строку:

$task = new \App\Task;

ответил(а) 2016-03-01T00:38:00+03:00 4 года, 4 месяца назад
39

Проблема, с которой вы сталкиваетесь, - это вы назвали ваш контроллер как "Задача", и вы делаете

 $task = new Task;

В этом случае код ссылается на задачу контроллера, но не на модельную задачу. Поэтому он ищет метод сохранения в классе контроллера задач, но не в модели. вы можете изменить его на

$task = new \App\Task;

ответил(а) 2016-03-01T00:37:00+03:00 4 года, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема