Reputation: 1
Having an issue I cant find anywhere on the web. Error informs me that save() method does not exits? Cant figure it out the problem. This problems happens when sending a post form to create/save a new task in controller.
The trace stack and error method is as follows ->
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
Task.php controller saveTask method ->
<?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('/');
}
}
Routes ->
<?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('/');
});
});
Would love getting some help with this.
Upvotes: 0
Views: 1303
Reputation: 62368
You have two classes named Task
, which is okay since they are in different namespaces.
First, you have your Task
model, which is \App\Task
. Second, you have your Task
controller, which is \App\Http\Controllers\Task
.
In your Task controller, in your saveTask
method, you have the following line:
$task = new Task;
Because you didn't specify the fully qualified class name, it will look in the current namespace for the class to use. Since you're in the \App\Http\Controllers
namespace, it is creating a new \App\Http\Controllers\Task
instance.
You need to change the line to:
$task = new \App\Task;
Upvotes: 2
Reputation: 7421
The problem you are facing is you named your controller as Task and you are doing
$task = new Task;
In this case the code is referring to the controller task but not the model task. So it is searching for save method in the Task controller class but not the model. you can change it to
$task = new \App\Task;
Upvotes: 0