Контроллер Laravel не является экземпляром

Я звоню своему контроллеру в route.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.'

Я просматривал интернет, чтобы найти решение. Много схожих ошибок связано с интерфейсами, и я не смог найти ничего полезного. Я переименовал свой контроллер один раз, что вызвало некоторую ошибку, но я восстановил его с помощью команды «composer dump-autoload».

1

Решение

Измените класс контроллера с:

class Controller extends BaseController {

Для того, чтобы:

class ControllerController extends BaseController {

Зачем это делать? Так как Controller класс уже существует в Laravel (BaseController простирается от Controller), так что вы, вероятно, хотите назвать это как-то иначе.

Также убедитесь, что файл сохранен как ControllerController.php в controllers реж.

Также ваш маршрут должен выглядеть так:

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

Я быстро проверил это на моей локальной машине разработчика, и это работает.

1

Другие решения

проверять config/app.php в псевдоним раздел:

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

контроллер класс уже существует. если вы хотите, вы должны указать пространство имен.

например

<?php namespace foo;

class controller extends \BaseController {

public function bar(){}

}

в маршрутах:

Route::get('bar',['as'=>'foo.bar', 'uses' => '\foo\controller@bar']);
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

То, что я сделал и работал для меня, это:

Под приложение / Http / Контроллеры использовать классы

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));
}
}

звонок в маршрутах.

Route::get('request', 'YourController@request');
0
По вопросам рекламы [email protected]