Пишем пространства с большой буквы в Yii 2.0

в 3:35, , рубрики: yii, yii 2, yii2, метки: , ,

Не так давно вышла первая альфа Yii 2, уже можно знакомится подробнее с ним.

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

Схожий случай с нескончаемой войной «пробелы vs. табуляция». Нам просто говорят: «Смиритесь с этим, не парьтесь».

ОК. Стараюсь смирится. Даже первое время получалось, кого интересует что там внутри фреймворка. Но ничего не получается.

namespace appcontrollers;

use yiiwebController;
use ZendBarcodeBarcode;

class SiteController extends Controller
{
}

Мне не комфортно когда в приложении вот такой вот бардак.

Пробелы и табуляцию можно взаимо заменить. Git hooks или IDE сделает это очень быстро. С пространствами сложнее, но нас же это не остановит :)

Помним что в PHP классы не чувствительны к регистру, остается лишь импортировать нужный файл.
Для этого добавим нужный автозагрузчик классов, сделать это надо после регистрации загрузчика Yii.

spl_autoload_register(function ($class) {
	if (0 === strpos($class, 'Yii\')) {
		$pos = strrpos($class, '\');
		$parts = explode('\', substr($class, 0, $pos));
		array_walk(
			$parts,
			function (&$item) {
				$item = lcfirst($item);
			}
		);
		spl_autoload_call(
			implode('\', $parts) . '\' . substr($class, $pos + 1)
		);

		return true;
	}

	return false;
});

Код лежит в репозитории, если вы используете Composer, можете добавить следующую зависимость

"repositories": [
	{
		"type": "package",
		"package": {
			"name": "slavcodev/ucfirst-namespace",
			"version": "dev-master",
			"source": {
				"type": "git",
				"url": "https://github.com/slavcodev/yii2-ucfirst-namespace.git",
				"reference": "master"
			},
			"autoload": {
				"files": ["autoload.php"]
			}
		}
	}
],
"require": {
	"php": ">=5.4.0",
	"ext-intl": "*",
	"yiisoft/yii2": "*",
	"slavcodev/ucfirst-namespace": "*"
}

Все теперь у нас порядок.

namespace AppControllers;

use YiiWebController;
use ZendBarcodeBarcode;

class SiteController extends Controller
{
}

P.S. Очень прошу не устраивать в комментариях холивар и не выражать свое негодование к решению разработчиков. Давайте сконцентрируемся на тексте поста, может у вас есть ко мне замечания или идеи как улучшить код. Спасибо.

Автор: slavcopost

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js