...

четверг, 12 декабря 2013 г.

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

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

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


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


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




namespace app\controllers;

use yii\web\Controller;
use Zend\Barcode\Barcode;

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 App\Controllers;

use Yii\Web\Controller;
use Zend\Barcode\Barcode;

class SiteController extends Controller
{
}




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

This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers.


Комментариев нет:

Отправить комментарий