Невозможно использовать Illuminate\Routing\Controller в качестве контроллера, поскольку это имя уже используется

Я учился использовать Laravel, смотрел Larcasts и использовал Docs, я наткнулся на урок, где описывается Eloquent, но я застрял с ошибкой:

at HandleExceptions->fatalExceptionFromError(
  array(
    'type' => '64',
    'message' => 'Cannot use Illuminate\Routing\Controller as Controller because the name is already in use'
  )
)

Я очень запутался и теперь точно скопировал приведенные примеры, но все еще получаю сообщение об ошибке. Я использую Laravel 5, поэтому я не знаю, были ли какие-то недокументированные изменения или я просто делаю что-то не так. Я не нашел ничего связанного с поиском в Google, который решает проблему, поэтому я надеялся, что кто-то здесь сможет помочь. Вот код, который выдает ошибку:

<?php namespace App\Http\Controllers;

use Illuminate\Routing\Controller;

use App\VarName;

class VarController extends Controller {

    public function Var()
    {
        $Variable = VarName::get();

        dd($Variable);
    }
}

Согласно документации, это должно работать, и в видео, которое я смотрел, это действительно сработало... что я упускаю?

Я попытался удалить класс контроллера, так как он, кажется, вызывает уже используемую ошибку, которая сломала все, переустановил и попытался просто использовать контроллер, поскольку он расширяет красноречивую модель, но теперь он говорит:

ErrorException в строке 258 Pluralizer.php: call_user_func() ожидает, что параметр 1 будет допустимым обратным вызовом, функция mb_strtolower не найдена или недопустимое имя функции

что выходит за рамки моего понимания внутренней работы Laravel, я застрял и не понимаю проблемы, согласно документации, я не вижу ничего плохого в своем коде, это кажется таким простым шагом. все, что я пытаюсь сделать, это получить информацию из базы данных, что происходит?

Заранее благодарю за любую помощь!


person Marcus Ruddick    schedule 05.12.2014    source источник
comment
Вы определили класс App\Http\Controllers\Controller?   -  person Wrikken    schedule 05.12.2014
comment
Существует класс контроллера по умолчанию, я его не создавал, но он есть.   -  person Marcus Ruddick    schedule 05.12.2014
comment
это как-то связано с проблемой, с которой я столкнулся?   -  person Marcus Ruddick    schedule 05.12.2014


Ответы (2)


Оператор use Illuminate\Routing\Controller; не работает, потому что в пространстве имен App\Http\Controllers уже есть класс Controller.

Чтобы решить насущную проблему, вы можете изменить ярлык пространства имен в операторе использования:

use Illuminate\Routing\Controller as BaseController;

Однако решение вашей конкретной проблемы заключается в том, что вы, вероятно, просто хотите полностью удалить оператор use Illuminate\Routing\Controller;.

В Laravel 5 класс App\Http\Controllers\Controller уже расширяет класс Illuminate\Routing\Controller. Цель состоит в том, чтобы все новые контроллеры расширяли класс App\Http\Controllers\Controller. Например, взгляните на App\Http\Controllers\HomeController или App\Http\Controllers\WelcomeController по умолчанию, так как оба расширяют класс App\Http\Controllers\Controller.

Таким образом, у вас есть два варианта:

// rename the class in the use statement
namespace App\Http\Controllers;
use Illuminate\Routing\Controller as BaseController;

// note the name of the class being extended
class VarController extends BaseController {
    // snip
}

Or

// extend the existing App\Http\Controllers\Controller class
namespace App\Http\Controllers;

class VarController extends Controller {
    // snip
}
person patricus    schedule 24.12.2014
comment
спасибо за ваш ответ, я как бы просто отказался от попыток Laravel 5 из-за этого, решил подождать, пока это не станет стабильной версией и не будет иметь конкретную документацию относительно ее отличий от 4. использовал 4 без проблем, и я думаю, что все еще буду подождите, пока 5 не станет стабильным, но полезно знать для дальнейшего использования! - person Marcus Ruddick; 24.12.2014
comment
Кажется, это ошибка в :generate в laravel 5 - person itsazzad; 23.03.2015

Это связано с существующим дубликатом введите здесь описание изображения

Решение состоит в том, чтобы удалить дубликат из импорта введите здесь описание изображения

См. прикрепленный образец

person Fred Ondieki    schedule 23.05.2021