0 follower

Соглашения

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

Ниже представлены соглашения, рекомендуемые для программирования под Yii. Для удобства примем, что WebRoot - это директория, в которую установлено приложение.

1. URL

По умолчанию, Yii понимает адреса URL следующего формата:

http://hostname/index.php?r=ControllerID/ActionID

GET-переменная r представляет маршрут, из которого Yii извлекает информацию о контроллере и действии. Если ActionID не указан, контроллер будет использовать действие по умолчанию (определенный в свойстве CController::defaultAction). Если же ControllerID также не указан (либо переменная r отсутствует), будет использован контроллер по умолчанию (определенный в свойстве CWebApplication::defaultController).

Используя CUrlManager можно создавать и применять более SEO-дружественные адреса URL, такие как http://hostname/ControllerID/ActionID.html. Эта возможность подробно описана в разделе Красивые адреса URL.

2. Код

Yii рекомендует именовать переменные, функции и классы, используя ГорбатыйРегистр, что подразумевает написание каждого слова в имени с большой буквы и соединение их без пробелов. Первое слово в имени переменных и функций должно быть написано в нижнем регистре, чтобы отличать их от имен классов (например, $basePath, runController(), LinkPager). Для имен приватных членов класса рекомендуется использовать знак подчеркивания в качестве префикса (например, $_actionList).

Поскольку пространства имен не поддерживаются версиями PHP до 5.3.0, рекомендуется, чтобы имена классов были уникальными во избежание конфликта имен с классами сторонних производителей. По этой причине все имена классов фреймворка имеют префикс "C".

Особое правило для имен классов контроллеров - они должны быть дополнены словом Controller. При этом идентификатором контроллера будет имя класса с первой буквой в нижнем регистре и без слова Controller. Например, для класса PageController идентификатором будет page. Данное правило делает приложение более защищенным. Оно также делает адреса URL более понятными (к примеру, /index.php?r=page/index вместо /index.php?r=PageController/index).

3. Конфигурация

Конфигурация - это массив пар ключ-значение, где каждый ключ представляет собой имя свойства конфигурируемого объекта, а значение - начальное значение соответствующего свойства. К примеру, array('name'=>'My application', 'basePath'=>'./protected') инициализирует свойства name и basePath соответствующими значениями.

Любые свойства объекта, которые доступны для записи, могут быть сконфигурированы. Если некоторые свойства не сконфигурированы, для них будут использованы значения по умолчанию. При конфигурировании свойств рекомендуется изучить соответствующий раздел документации, чтобы избежать задания некорректных значений.

4. Файл

Соглашения для именования и использования файлов зависят от их типов. Файлы классов должны быть названы так же, как и общие классы, содержащиеся в них. Например, класс CController находится в файле CController.php. Общий класс - это класс, который может быть использован любыми другими классами. Каждый файл классов должен содержать максимум один общий класс. Приватные классы (классы, которые могут быть использованы только одним общим классом) должны находится в одном файле с общим классом.

Файлы представлений должны иметь такие же имена, как и содержащиеся в них представления. К примеру, представление index находится в файле index.php. Файл представления - это PHP-скрипт, содержащий HTML и PHP-код, в основном для задач отображения пользовательского интерфейса.

Конфигурационные файлы могут именоваться произвольным образом. Файл конфигурации - это PHP-скрипт, чье единственное назначение - возвращать ассоциативный массив, представляющий конфигурацию.

5. Директория

В Yii предопределен набор директорий для различных целей. Каждая из них может быть изменена при необходимости.

  • WebRoot/protected: это базовая директория приложения, содержащая все наиболее важные с точки зрения безопасности PHP-скрипты и файлы данных. Псевдоним по умолчанию для этого пути - application. Эта директория и ее содержимое должно быть защищено от прямого доступа из веб. Директория может быть настроена через CWebApplication::basePath;

  • WebRoot/protected/runtime: эта директория содержит приватные временные файлы, сгенерированные во время выполнения приложения. Эта директория должна быть доступна для записи вебсервером. Она может быть настроена через CApplication::runtimePath;

  • WebRoot/protected/extensions: эта директория содержит все сторонние расширения. Она может быть настроена через CApplication::extensionPath;

  • WebRoot/protected/modules: эта директория содержит все модули приложения, каждый из которых представлен в отдельной поддиректории. Директория может быть настроена через CWebApplication::modulePath;

  • WebRoot/protected/controllers: эта директория содержит файлы всех классов контроллеров. Она может быть настроена через CWebApplication::controllerPath;

  • WebRoot/protected/views: эта директория содержит файлы всех представлений, включая представления контроллеров, макеты и системные представления. Она может быть настроена через CWebApplication::viewPath;

  • WebRoot/protected/views/ControllerID: эта директория содержит файлы представлений для отдельного класса контроллера. Здесь ControllerID является идентификатором контроллера. Директория может быть настроена через CController::getViewPath;

  • WebRoot/protected/views/layouts: эта директория содержит файлы макетов. Она может быть настроена через CWebApplication::layoutPath;

  • WebRoot/protected/views/system: эта директория содержит файлы системных представлений (используются для отображения сообщений об ошибках и исключениях). Она может быть настроена через CWebApplication::systemViewPath;

  • WebRoot/assets: эта директория содержит файлы ресурсов (приватные файлы, которые могут быть опубликованы для доступа к ним из веб). Директория должна быть доступна для записи процессами веб-сервера. Она может быть настроена через CAssetManager::basePath;

  • WebRoot/themes: эта директория содержит различные темы оформления, которые доступны приложению. Каждая поддиректория содержит отдельную тему с именем, совпадающим с названием поддиректории. Директория может быть настроена через CThemeManager::basePath.