Я звоню своему контроллеру в 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».
Измените класс контроллера с:
class Controller extends BaseController {
Для того, чтобы:
class ControllerController extends BaseController {
Зачем это делать? Так как Controller
класс уже существует в Laravel (BaseController
простирается от Controller
), так что вы, вероятно, хотите назвать это как-то иначе.
Также убедитесь, что файл сохранен как ControllerController.php
в controllers
реж.
Также ваш маршрут должен выглядеть так:
Route::get('request', 'ControllerController@request');
Я быстро проверил это на моей локальной машине разработчика, и это работает.
проверять 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']);
У меня просто была такая же проблема:
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 поддерживает ее (должен будет прочитать об этом).
Не нашел такой конкретной ситуации в другом месте, поэтому надеюсь, что это кому-нибудь поможет.
То, что я сделал и работал для меня, это:
Под приложение / 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');