我是一個使用laravel的新手,在將代碼從路由更改爲控制器後出現問題。Laravel 5.2調用未定義的方法Illuminate Database Query Builder :: activateTask()
當我將它們放置在routes.php中時,所有代碼都工作正常,但是當我將此代碼放入控制器Task.php中的函數並將函數函數添加到routes.php時,出現以下錯誤 - >
BadMethodCallException in Builder.php line 2161: Call to undefined method Illuminate\Database\Query\Builder::activateTask()
in Builder.php line 2161
at Builder->__call('activateTask', array(object(Task)))
at call_user_func_array(array(object(Builder), 'activateTask'), array(object(Task))) in Builder.php line 1313
at Builder->__call('activateTask', array(object(Task)))
at call_user_func_array(array(object(Builder), 'activateTask'), array(object(Task))) in Model.php line 3490
at Model->__call('activateTask', array(object(Task)))
at call_user_func_array(array(object(Task), 'activateTask'), array(object(Task))) in Model.php line 3504
at Model::__callStatic('activateTask', array(object(Task))) in routes.php line 45
at RouteServiceProvider->{closure}(object(Task))
at call_user_func_array(object(Closure), array('task' => object(Task))) in Route.php line 158
at Route->runCallable(object(Request)) in Route.php line 137
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 - >
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class Task extends Controller
{
//
public function activateTask($task)
{
if($task->active == 1)
{
return redirect('/');
}
else
{
$task->active = 1;
$task->save();
if(Session('active') != null)
{
$oldtask = App\Session::find(Session('active'));
$oldtask->Task->active = 0;
$oldtask->Task->save();
$oldtask->touch();
$oldtask->save();
}
$session = new Session;
$session->task()->associate($task);
$session->save();
Session(['active' => $session->id]);
return redirect('/');
}
}
public function saveTask($request) {
$validator = Validator::make($request->all(), [
'name' => 'required|max:255',
]);
if($validator->fails()) {
return redirect('/')->withInput()->withErrors($validator);
}
$task = new Task;
$task->name = $request->name;
$task->deadline = $request->deadline;
$task->save();
}
}
任務模型Task.php - >
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Task extends Model
{
//
public function sessions()
{
return $this->hasMany('App\Session');
}
}
個
會話模型session.php文件 - >
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Session extends Model
{
//
public function task()
{
return $this->belongsTo('App\Task');
}
}
routes.php文件 - >當我按下按鈕張貼到路由
<?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', function (Request $request) {
Task::saveTask($request);
/*
$validator = Validator::make($request->all(), [
'name' => 'required|max:255',
]);
if($validator->fails()) {
return redirect('/')->withInput()->withErrors($validator);
}
$task = new Task;
$task->name = $request->name;
$task->deadline = $request->deadline;
$task->save();
*/
return redirect('/');
});
Route::post('/task/{task}/activate', function (Task $task) {
Task::activateTask($task);
});
Route::post('/task/{task}/deactivate', function (Task $task) {
$task->active = 0;
$task->save();
$session = App\Session::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('/');
});
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('/');
});
});
問題發生。
試圖谷歌的問題,並嘗試不同的方法來解決這個問題,但沒有運氣。我非常確定這是一件非常容易和愚蠢的事情,但無法弄清楚。
非常感謝!我試圖從文檔中找出。我只是不明白變量是如何通過路由的......但它似乎是自動執行的,如果你在函數中請求它的話? 插件使用App/Session到任務控制器後開始工作。有更多的問題,但希望可以自己游泳徹底。 –