Пространства имен Laravel 5

Я только что загрузил Laravel 5 и начал мигрировать к нему. Тем не менее, я нахожу нужное использование пространств имен действительно раздражающим.

Мне не кажется, что я получаю много от него, кроме загромождения кода.

Как я могу отключить требование namespacing?

Ответ 1

Я не думаю, что вы должны отключить или удалить пространства имен. Основной причиной пространства имен является предотвращение конфликтов с классами с одинаковым именем. Как только приложение станет больше, у вас будут классы с одинаковым именем. Пример из источника Framework:

Illuminate\Console\Application и Illuminate\Foundation\Application

Оба называются одинаковыми. Только из-за пространства имен вы можете импортировать правильный класс. Конечно, вы также можете назвать их:

ConsoleApplication и FoundationApplication

Но пока пространство имен обычно используется только при импорте класса в верхней части файла:

use `Illuminate\Console\Application`

Само имя используется везде в коде. Это то, что действительно загромождает ваш код, слишком длинные имена классов.

Помимо названия, пространства имен также поощряют лучшую структуру и помогают узнать, где находятся ваши файлы. Это потому, что структура по умолчанию Laravel соответствует PSR-4. Это означает, что если у вас есть контроллер App\Http\Controllers\HomeController, вы можете быть уверены, что найдете HomeController.php в разделе app/Http/Controllers.

Я знаю об этом, но это не нужно в проекте, над которым я работаю.

Возможно, это не имеет смысла для текущего проекта, но привыкание к пространствам имен поможет вам решать большие проекты в будущем.

И будучи пользователем Sublime Text, который не имеет autoimport, он действительно становится болью

Я не очень хорошо знаю Sublime Text, но CodeIntel может иметь автоматический импорт. В противном случае рассмотрим возможность переключения на другой редактор /IDE. Я очень рекомендую JetBrains PhpStorm


В конце концов, если вы все еще не хотите использовать пространства имен, продолжайте использовать Laravel 4 или найдите другую структуру, которая следует за менее хорошими практиками...


Удаление пространств имен из классов приложений

Пока вы не рекомендуете это, вы можете хотя бы удалить часть пространства имен в своем приложении.

Например, пространство имен контроллера по умолчанию App\Http\Controllers может быть изменено без какого-либо пространства имен в RouteServiceProvider:

protected $namespace = '';

И для ваших моделей вы можете просто удалить пространство имен в файле и ваше хорошее. Но имейте в виду, что без пространств имен автозагрузка PSR-4 больше не будет работать. Вам придется автозагружать файлы с помощью classmap в composer.json

Ответ 2

Вы можете избежать использования пространств имен для собственных классов, указав их в глобальном пространстве имен в файле composer.json. Вот так:

"autoload": {
    "psr-0": {
    "": ["app/Http/Controllers/",
        "app/models/",
        "app/helpers"
        ]
},

Вам также придется изменить приложение/Провайдеры/RouteServiceProvider.php на:

protected $namespace = '';

для маршрутизации на работу.