jjlt-900806
jjlt-900806

Reputation: 1

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

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

Answers (2)

patricus
patricus

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

oseintow
oseintow

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

Related Questions