laravel控制器不可实例化

时间:2014-11-11 13:35:24

标签: php exception laravel controller instantiation

我在routes.php中调用我的控制器:

Route::get('request', 'Controller@request');

在我的控制器中是方法请求:

class Controller extends BaseController {

   public function request()
   {
        $number1 = int rand ( 10, 20 );
        $number2 = int rand ( 0, 10 );
        return View::make('request', array($number1, $number2));
   }
}

问题是,我得到了错误:

exception 'Illuminate\Container\BindingResolutionException' with message 'Target [Controller] is not instantiable.'

我正在浏览互联网以寻找解决方案。很多simmilar错误与接口有关,我找不到任何有用的东西。我将控制器重命名一次,导致了一些错误,但我用“composer dump-autoload”命令修复了它。

4 个答案:

答案 0 :(得分:2)

检查别名部分中的config/app.php

'Controller'        => 'Illuminate\Routing\Controller',

控制器类已经存在。如果你想要它,你必须命名它。

e.g。

<?php namespace foo;

class controller extends \BaseController {

public function bar(){}

}
路线中的

Route::get('bar',['as'=>'foo.bar', 'uses' => '\foo\controller@bar']);

答案 1 :(得分:2)

我遇到了同样的问题:

Target [App\Http\Controllers\Frontend\Booking\BookingController] is not instantiable.

问题是我已将我的构造函数声明为私有。

参考代码:

namespace App\Http\Controllers\Frontend\Booking;

use App\Http\Controllers\Controller;

class BookingController extends Controller
{
    private function __construct() {
         ...
    }
    ...
}

删除构造函数或将其公开解决了我的错误。没有尝试过让它像私有一样工作,因为我不熟悉整个单实例类(单例)范例,或者如果Laravel支持它(将不得不阅读它)。

在其他地方没有发现这种特殊情况,所以希望它有所帮助。

答案 2 :(得分:1)

从以下位置更改控制器类:

class Controller extends BaseController {

要:

class ControllerController extends BaseController {

为什么这样?因为Laravel中存在Controller类(BaseControllerController扩展),所以您可能希望将其命名为其他内容。

另外,请确保该文件在ControllerController.php目录中保存为controllers

此外,您的路线应如下所示:

Route::get('request', 'ControllerController@request');

我已经在我的本地开发机器上快速测试了它并且它可以工作。

答案 3 :(得分:0)

我为我所做的工作是:

app / Http / Controllers 下使用这些类

Controlles.php

<?php namespace App\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;

abstract class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}

YourController.php

<?php namespace App\Http\Controllers;

class YourController extends Controller
{
    public function request() {
        $number1 = int rand ( 10, 20 );
        $number2 = int rand ( 0, 10 );
        return View::make('request', array($number1, $number2));
    }
}

routes.php中的调用:

Route::get('request', 'YourController@request');