Yii Framework 2 Change Log ========================== 2.0.0-rc under development -------------------------- - Bug #1263: Fixed the issue that Gii and Debug modules might be affected by incompatible asset manager configuration (qiangxue) - Bug #2314: Gii model generator does not generate correct relation type in some special case (qiangxue) - Bug #2563: Theming is not working if the path map of the theme contains ".." or "." in the paths (qiangxue) - Bug #2801: Fixed the issue that GridView gets footer content before data cells content (ElisDN) - Bug #2821: Console help command incorrectly lists non-console controllers as available commands (qiangxue) - Bug #2853: ActiveRecord did not handle resource-typed columns well (chris68, qiangxue) - Bug #3042: `yii\widgets\Pjax` should end application right after it finishes responding to a pjax request (qiangxue) - Bug #3066: `yii\db\mssql\Schema::getTableSchema()` should return null when the table does not exist (qiangxue) - Bug #3091: Fixed inconsistent treatment of `Widget::run()` when a widget is used as a container and as a self-contained object (qiangxue) - Bug #3118: Ensure client validation has the same behavior as server side validation for number validator (cebe) - Bug #3121: `yii\base\Application::bootstrap` may fail to load some components if they are specified as class names (qiangxue) - Bug #3125: `yii\console\controllers\AssetController` now respects data URL resources (klimov-paul) - Bug #3128: Fixed the bug that `defaultRoles` set in RBAC manager was not working as specified (qiangxue) - Bug #3153: Fixed the bug that using "between" operator to build a SQL query will cause a PHP notice (gonimar) - Bug #3184: Fixed the bug that client validation for string length comparison did not set error message correctly (Sergeygithub) - Bug #3194: Date formatter works only for timestamps in the year range 1970 to 2038 (kartik-v) - Bug #3204: `yii\di\Container` did not handle the `$config` parameter well in case when it does not have a default value (qiangxue) - Bug #3216: Fixed the bug that `yii.activeForm.destroy()` did not remove `submit` event handlers (qiangxue) - Bug #3233: Ensure consistent behavior in ActiveRecord::afterSave() (cebe, qiangxue) - Bug #3236: Return value for DateTime->format('U') casted to double to allow correct date formatting (pgaultier) - Bug #3268: Fixed the bug that the schema name in a table name was not respected by `yii\db\mysql\Schema` (terazoid, qiangxue) - Bug #3311: Fixed the bug that `yii\di\Container::has()` did not return correct value (mgrechanik, qiangxue) - Bug #3327: Fixed "Unable to find debug data" when logging objects with circular references (jarekkozak, samdark) - Bug #3368: Fix for comparing numeric attributes in JavaScript (technixp) - Bug #3393: Fix `yii\helpers\FileHelper::copyDirectory()` pattern not working (klimov-paul) - Bug #3431: Allow using extended ErrorHandler class from the app namespace (cebe) - Bug #3436: Fixed the issue that `ServiceLocator` still returns the old component after calling `set()` with a new definition (qiangxue) - Bug #3458: Fixed the bug that the image rendered by `CaptchaAction` was using a wrong content type (MDMunir, qiangxue) - Bug #3473: Allow postgreSQL to specify timestamp precision via abstract types in QueryBuilder (cebe) - Bug #3478: Fixed yii\console\Controller::select accept empty input as '0' value (lynicidn) - Bug #3522: Fixed BaseFileHelper::normalizePath to allow a (.) for the current path. (skotos) - Bug #3548: Fixed the bug that X-Rate-Limit-Remaining header is always zero when using RateLimiter (qiangxue) - Bug #3559: Use native support for batchInsert in SQLite versions >= 3.7.11 and avoid limitations of the fallback (cebe) - Bug #3564: Fixed the bug that primary key columns should not take default values from schema (qiangxue) - Bug #3567: Fixed the bug that smallint was treated as string for PostgreSQL (qiangxue) - Bug #3568: When the primary query sets `asArray`, it is not respected by the `via` relational query (qiangxue) - Bug #3578: Fixed postgreSQL column type detection, added missing types (MDMunir, cebe) - Bug #3583: Added typecast to auto value of primary key on insert of sql active record (cebe) - Bug #3591: Fixed incomplete obsolete filling in i18n `MessageController::saveMessagesToDb()` (advsm) - Bug #3601: Fixed the bug that the refresh URL was not generated correctly by `Captcha` (qiangxue, klevron) - Bug #3638: `yii\filters\HttpCache` does not work as expected when session is started before the filter (qiangxue) - Bug #3681: Fixed problem with AR::findOne() when a default scope joins another table so that PK name becomes ambigous (cebe) - Bug #3715: Fixed the bug that using a custom pager/sorter with `GridView` may generate two different pagers/sorters if the layout configures two pagers/sorters (qiangxue) - Bug #3716: `DynamicModel::validateData()` does not call `validate()` if the `$rules` parameter is empty (qiangxue) - Bug #3751: Fixed postgreSQL schema data for enum values, do not add values if there are none (makroxyz) - Bug #3752: `QueryBuilder::batchInsert()` does not typecast input values (qiangxue) - Bug #3756: Fix number formatting error for `\yii\base\Formatter` by converting strings to float (kartik-v) - Bug #3772: Behaviors adding validation rules do not work as expected (qiangxue) - Bug #3817: `yii\rbac\PhpManager::getChildren()` returns null instead of expected empty array (qiangxue) - Bug #3843: Fixed Menu bug when using `template` with `encodeLabel` => false (creocoder, umneeq) - Bug #3863: Fixed incorrect js selector for `\yii\widgets\ActiveForm::errorSummaryCssClass` when it contains multiple classes (creocoder, umneeq) - Bug #3893: Headers did not overwrite default setting by webserver (cebe) - Bug #3909: `Html::to()` should not prefix base URL to URLs that already contain scheme (qiangxue) - Bug #3934: yii.handleAction() in yii.js does not correctly detect if a hyperlink contains useful URL or not (joni-jones, qiangxue) - Bug #3968: Messages logged in shutdown functions are not handled (qiangxue) - Bug #3989: Fixed yii\log\FileTarget::$rotateByCopy to avoid any rename (cebe) - Bug #3996: Traversing `Yii::$app->session` may cause a PHP error (qiangxue) - Bug #4020: OCI column detection did not work so gii and other things failed (Sanya1991) - Bug #4123: Trace level in logger had no effect in Targets, traces where not logged (cebe) - Bug #4127: `CaptchaValidator` clientside error message wasn't formed properly (samdark) - Bug #4162: Fixed bug where schema name was not used in ’SHOW CREATE TABLE’ query in `yii\db\mysql\Schema` (stevekr) - Bug: Fixed inconsistent return of `\yii\console\Application::runAction()` (samdark) - Bug: URL encoding for the route parameter added to `\yii\web\UrlManager` (klimov-paul) - Bug: Fixed the bug that requesting protected or private action methods would cause 500 error instead of 404 (qiangxue) - Bug: Fixed Object of class Imagick could not be converted to string in CaptchaAction (eXprojects, cebe) - Enh #87: Helper `yii\helpers\Security` converted into application component, cryptographic strength improved (klimov-paul) - Enh #422: Added Support for BIT(M) data type default values in Schema (cebe) - Enh #1160: Added $strict parameter to Inflector::camel2id() to handle consecutive uppercase chars (schmunk) - Enh #1452: Added `Module::getInstance()` to allow accessing the module instance from anywhere within the module (qiangxue) - Enh #2264: `CookieCollection::has()` will return false for expired or removed cookies (qiangxue) - Enh #2435: `yii\db\IntegrityException` is now thrown on database integrity errors instead of general `yii\db\Exception` (samdark) - Enh #2558: Enhanced support for memcached by adding `yii\caching\MemCache::persistentId` and `yii\caching\MemCache::options` (qiangxue) - Enh #2837: Error page now shows arguments in stack trace method calls (samdark) - Enh #2906: Added support for using conditional comments for js and css files registered through asset bundles and Html helper (exromany, qiangxue) - Enh #2942: Added truncate and truncateWord methods (Alex-Code, samdark) - Enh #3008: Added `Html::errorSummary()` (qiangxue) - Enh #3088: The debug and gii modules will manage their own URL rules now (hiltonjanfield, qiangxue) - Enh #3101: Improved handling of log target failures. It will now skip target and log reason instead of going into infinite cycle (samdark) - Enh #3103: debugger panel is now not displayed when printing a page (githubjeka) - Enh #3108: Added `yii\debug\Module::enableDebugLogs` to disable logging debug logs by default (qiangxue) - Enh #3132: `yii\rbac\PhpManager` now supports more compact data file format (qiangxue) - Enh #3154: Added validation error display for `GridView` filters (ivan-kolmychek) - Enh #3196: Masked input upgraded to use jquery.inputmask plugin with more features. (kartik-v) - Enh #3220: Added support for setting transaction isolation levels (cebe) - Enh #3221: Added events for DB transaction commit/rollback (drcypher, qiangxue) - Enh #3222: Added `useTablePrefix` option to the model generator for Gii (horizons2) - Enh #3230: Added `yii\filters\AccessControl::user` to support access control with different actors (qiangxue) - Enh #3232: Added `export()` and `exportAsString()` methods to `yii\helpers\BaseVarDumper` (klimov-paul) - Enh #3244: Allow logging complex data such as arrays and object via the log system (cebe) - Enh #3252: Added support for case insensitive matching using ILIKE to PostgreSQL QueryBuilder (cebe) - Enh #3280: Support dynamically attaching anonymous behaviors (qiangxue) - Enh #3284: Added support for checking multiple ETags by `yii\filters\HttpCache` (qiangxue) - Enh #3298: Supported configuring `View::theme` using a class name (netyum, qiangxue) - Enh #3328: `BaseMailer` generates better text body from html body (armab) - Enh #3380: Allow `value` in `defaultValueValidator` to be a closure (Alex-Code) - Enh #3399, #3241: Added support for MS SQL Server older than 2012 (fourteenmeister, samdark) - Enh #3472: Added configurable option to encode spaces in dropDownLists and listBoxes (kartik-v) - Enh #3518: `yii\helpers\Html::encode()` now replaces invalid code sequences with "�" (DaSourcerer) - Enh #3520: Added `unlinkAll()`-method to active record to remove all records of a model relation (NmDimas, samdark, cebe) - Enh #3521: Added `yii\filters\HttpCache::sessionCacheLimiter` (qiangxue) - Enh #3542: Removed requirement to specify `extensions` in application config (samdark) - Enh #3562: Adding rotateByCopy to yii\log\FileTarget (pawzar) - Enh #3574: Add integrity check support for SQLite (zeeke) - Enh #3597: Nested array support for HTML5 custom "data-*" attributes (armab) - Enh #3607: Added support for limit in migrations actions: history, new, redo (Ragazzo) - Enh #3631: Added property `currencyCode` to `yii\i18n\Formatter` (leandrogehlen) - Enh #3636: Hide menu container tag with empty items in `yii\widgets\Menu` (arturf) - Enh #3643: Improved Mime-Type detection by using the `mime.types` file from apache http project to dected mime types by file extension (cebe, pavel-voronin, trejder) - Enh #3765: Added `yii\web\User::enableSession` to support authentication without using session (qiangxue) - Enh #3773: Added `FileValidator::mimeTypes` to support validating MIME types of files (Ragazzo) - Enh #3774: Added `FileValidator::checkExtensionByMimeType` to support validating file types against file mime-types (Ragazzo) - Enh #3801: Base migration controller `yii\console\controllers\BaseMigrateController` extracted (klimov-paul) - Enh #3811: Now Gii model generator makes autocomplete for model class field (mitalcoi) - Enh #3926: `yii\widgets\Breadcrumbs::$links`. Allows individual link to have its own `template` (creocoder, umneeq) - Enh #3939: `\yii\Inflector::slug()` improvements (samdark) - Added protected `\yii\Inflector::transliterate()` that could be replaced with custom translit implementation. - Added proper tests for both intl-based slug and PHP fallback. - Removed character maps for non-latin languages. - Improved overall slug results. - Added note about the fact that intl is required for non-latin languages to requirements checker. - Enh #3992: In mail layouts you can now access the message object via `$message` variable (qiangxue) - Enh #4028: Added ability to `yii\widgets\Menu` to encode each item's label separately (creocoder, umneeq) - Enh #4072: `\yii\rbac\PhpManager` adjustments (samdark) - Data is now stored in three separate files for items, assignments and rules. File format is simpler. - Removed `authFile`. Added `itemFile`, `assignmentFile` and `ruleFile`. - `createdAt` and `updatedAt` are now properly filled with corresponding file modification time. - `save()` and `load()` are now protected instead of public. - Added unit test for saving and loading data. - Enh #4080: Added proper handling and support of the symlinked directories in `FileHelper`, added $options parameter in `FileHelper::removeDirectory()` (resurtm) - Enh #4086: changedAttributes of afterSave Event now contain old values (dizews) - Enh #4114: Added `Security::generateRandomBytes()`, improved tests (samdark) - Enh: Added support for using sub-queries when building a DB query with `IN` condition (qiangxue) - Enh: Supported adding a new response formatter without the need to reconfigure existing formatters (qiangxue) - Enh: Added `yii\web\UrlManager::addRules()` to simplify adding new URL rules (qiangxue) - Enh: Added support to insert an event handler at the beginning of class-level event handler queue (qiangxue) - Enh: Added `yii\console\Controller::EXIT_CODE_NORMAL` and `yii\console\Controller::EXIT_CODE_ERROR` constants (samdark) - Enh: `yii\console\MigrateController` now returns `yii\console\Controller::EXIT_CODE_ERROR` in case of failed migration (samdark) - Enh: Added method ErrorHandler::unregister() for unregistering the ErrorHandler (cebe) - Enh: Added `all` option to `MigrateController::actionDown()` action (creocoder, umneeq) - Enh: Added support for array attributes in `exist` validator (creocoder) - Enh: Added support for using path alias with `FileDependency::fileName` (qiangxue) - Enh: Added param `hideOnSinglePage` to `yii\widgets\LinkPager` (arturf) - Enh: Added support for array attributes in `in` validator (creocoder) - Enh: Improved `yii\helpers\Inflector::slug` to support more cases for Russian, Hebrew and special characters (samdark) - Enh: ListView now uses the widget ID in the base tag, consistent to gridview (cebe) - Chg #2287: Split `yii\db\ColumnSchema::typecast()` into two methods `phpTypecast()` and `dbTypecast()` to allow specifying PDO type explicitly (cebe) - Chg #2898: `yii\console\controllers\AssetController` is now using hashes instead of timestamps (samdark) - Chg #2913: RBAC `DbManager` is now initialized via migration (samdark) - Chg #3036: Upgraded Twitter Bootstrap to 3.1.x (qiangxue) - Chg #3175: InvalidCallException, InvalidParamException, UnknownMethodException are now extended from SPL BadMethodCallException (samdark) - Chg #3358: Removed automatic CSRF meta tag generation by `View`. Added `Html::csrfMetaTags()` and its call to main layout files (qiangxue) - Chg #3383: Added `$type` parameter to `IdentityInterface::findIdentityByAccessToken()` (qiangxue) - Chg #3531: \yii\grid\GridView now allows any character (except ":") in the attribute part of the shorthand syntax for columns (rawtaz) - Chg #3544: Added `$key` as a parameter to the callable specified via `yii\grid\DataColumn::value` (mdmunir) - Chg #3640: All cookies are now httpOnly by default in order to increase overall security (samdark) - Chg #3687: Default `sourceLanguage` and `language` are now `en-US` in order for i18n formatter to work correctly (samdark) - Chg #3804: Added `fileinfo` PHP extension to the basic requirement of Yii (Ragazzo) - Chg #3866: The `FileValidator::types` property is renamed to `FileValidator::extensions` (Ragazzo) - Chg #3897: Raised visibility of `yii\web\View::registerAssetFiles()` to protected (samdark) - Chg #3899: Moved `MailEvent` class to `yii\mail` namespace (cebe) - Chg #3956: Flash messages set via `Yii::$app->session->setFlash()` will be removed only if they are accessed (qiangxue) - Chg #3989: The default value for `yii\log\FileTarget::$rotateByCopy` now defaults to true to work on windows by default (cebe) - Chg #4071: `mail` component renamed to `mailer`, `yii\log\EmailTarget::$mail` renamed to `yii\log\EmailTarget::$mailer` (samdark) - Chg #4147: `BaseMailer::compose()` will not overwrite the `message` parameter if it is explicitly provided (qiangxue) - Chg #4201: change default value of `SyslogTarget::facility` from LOG_SYSLOG to LOG_USER (dizews) - Chg #4227: `\yii\widgets\LinkPager::$hideOnSinglePage` is now `true` by default (samdark) - Chg: Replaced `clearAll()` and `clearAllAssignments()` in `yii\rbac\ManagerInterface` with `removeAll()`, `removeAllRoles()`, `removeAllPermissions()`, `removeAllRules()` and `removeAllAssignments()` (qiangxue) - Chg: Added `$user` as the first parameter of `yii\rbac\Rule::execute()` (qiangxue) - Chg: `yii\grid\DataColumn::getDataCellValue()` visibility is now `public` to allow accessing the value from a GridView directly (cebe) - Chg: `yii\data\ActiveDataProvider::$query` will not be modified directly with pagination and sorting anymore so it will be reuseable (cebe) - Chg: Removed `yii\rest\ActiveController::$transactional` property and connected functionality (samdark) - Chg: Changed the default value of the `keyPrefix` property of cache components to be null (qiangxue) - Chg: Added `prefix` column to `yii\log\DbTarget` to have the same amount of information logged as in files and emails (cebe) - Chg: Use `limit(null)` instead of `limit(-1)` in migration controller to be compatible to more backends (cebe) - New #3911: Added `yii\behaviors\SluggableBehavior` that fills the specified model attribute with the transliterated and adjusted version to use in URLs (creocoder) 2.0.0-beta April 13, 2014 ------------------------- - Bug #1265: AssetController does not override 'js' and 'css' for compressed bundles (klimov-paul) - Bug #1326: The `visible` setting for `DetailView` doesn't work as expected (qiangxue) - Bug #1412: `FileValidator` and `ImageValidator` still trigger `uploadRequired` error in some case when `skipOnEmpty` is true and no upload is provided (qiangxue) - Bug #1446: Logging while logs are processed causes infinite loop (qiangxue) - Bug #1497: Localized view files are not correctly returned (mintao) - Bug #1500: Log messages exported to files are not separated by newlines (omnilight, qiangxue) - Bug #1504: Debug toolbar isn't loaded successfully in some environments when xdebug is enabled (qiangxue) - Bug #1509: The SQL for creating Postgres RBAC tables is incorrect (qiangxue) - Bug #1545: It was not possible to execute db Query twice, params where missing (cebe) - Bug #1550: fixed the issue that JUI input widgets did not property input IDs. - Bug #1654: Fixed the issue that a new message source object is generated for every new message being translated (qiangxue) - Bug #1582: Error messages shown via client-side validation should not be double encoded (qiangxue) - Bug #1591: StringValidator is accessing undefined property (qiangxue) - Bug #1597: Added `enableAutoLogin` to basic and advanced application templates so "remember me" now works properly (samdark) - Bug #1631: Charset is now explicitly set to UTF-8 when serving JSON (samdark) - Bug #1635: `yii\jui\SliderInput` wasn't properly initialized (samdark) - Bug #1659: MSSQL doesn't support limit (Ana1oliy) - Bug #1686: ActiveForm is creating duplicated messages in error summary (qiangxue) - Bug #1704: Incorrect regexp is used in `Inflector::camelize()` (qiangxue) - Bug #1710: OpenId auth client does not request required attributes correctly (klimov-paul) - Bug #1798: Fixed label attributes for array fields (zhuravljov) - Bug #1800: Better check for `$_SERVER['HTTPS']` in `yii\web\Request::getIsSecureConnection()` (ginus, samdark) - Bug #1812: Hide potential warning message due to race condition occurring to `Session::regenerateID()` call (qiangxue) - Bug #1827: Debugger toolbar is loaded twice if an action is calling `run()` to execute another action (qiangxue) - Bug #1868: Added ability to exclude tables from FixtureController apply/clear actions. (Ragazzo) - Bug #1869: Fixed tables clearing. `TRUNCATE` changed to `DELETE` to avoid postgresql tables checks (and truncating all tables) (Ragazzo) - Bug #1870: Validation errors weren't properly translated when using clientside validation (samdark) - Bug #1930: Fixed domain based URL matching for website root (samdark) - Bug #1937: Fixed wrong behavior or advanced app's `init --env` when called without parameter actually specified (samdark) - Bug #1959: `Html::activeCheckbox` wasn't respecting custom values for checked/unchecked state (klevron, samdark) - Bug #1965: `Controller::findLayoutFile()` returns incorrect file path when layout name starts with a slash (qiangxue) - Bug #1992: In module scenario that use 'site/captcha' will get wrong refreshUrl (callmez) - Bug #1993: afterFind event in AR is now called after relations have been populated (cebe, creocoder) - Bug #1998: Unchecked required checkbox never pass client validation (klevron) - Bug #2084: AssetController adjusting CSS URLs declared at same line fixed (klimov-paul) - Bug #2091: `QueryBuilder::buildInCondition()` fails to handle array not starting with index 0 (qiangxue) - Bug #2160: SphinxQL does not support OFFSET (qiangxue, romeo7) - Bug #2209: When I18N message translation is missing source language is now used for formatting (samdark) - Bug #2212: `yii\gridview\DataColumn` generates incorrect labels when used with nosql DB and there is no data (qiangxue) - Bug #2298: Fixed the bug that Gii controller generator did not allow digit in the controller ID (qiangxue) - Bug #2303: Fixed the bug that `yii\base\Theme::pathMap` did not support dynamic update with path aliases (qiangxue) - Bug #2324: Fixed QueryBuilder bug when building a query with "query" option (mintao) - Bug #2399: Fixed the bug that AssetBundle did not handle relative URLs correctly (qiangxue) - Bug #2502: Unclear error message when `$_SERVER['DOCUMENT_ROOT']` is empty (samdark) - Bug #2519: MessageSource removed translation messages when event handler was bound to `missingTranslation`-event (cebe) - Bug #2527: Source language for `app` message category was always `en` no matter which application `sourceLanguage` was used (samdark) - Bug #2559: Going back on browser history breaks GridView filtering with `Pjax` (tonydspaniard) - Bug #2571: Fixed the bug that batchInsert will fail for SQLite if the values contain null or boolean false (qiangxue) - Bug #2607: `yii message` tool wasn't updating `message` table (mitalcoi) - Bug #2624: Html::textArea() should respect "name" option. (qiangxue) - Bug #2653: Fixed the bug that unsetting an unpopulated AR relation would trigger exception (qiangxue) - Bug #2681: Fixed the bug of php build-in server https://bugs.php.net/bug.php?id=66606 (dizews) - Bug #2683: Fixed the bug that batchInsert will fail for MySQL if the values contain boolean false (qiangxue) - Bug #2695: Fixed the issue that `FileValidator::isEmpty()` always returns true for validate multiple files (ZhandosKz) - Bug #2739: Fixed the issue that `CreateAction::run()` was using obsolete `Controller::createAbsoluteUrl()` method (tonydspaniard) - Bug #2740: Fixed the issue that `CaptchaAction::run()` was using obsolete `Controller::createUrl()` method (tonydspaniard) - Bug #2760: Fixed GridView `filterUrl` parameters (qiangxue, AlexGx) - Bug #2834: When overriding i18n translation sources from config using `app*` or `yii*` default `app` and `yii` sources were not removed (samdark) - Bug #2848: Individual queries should be enclosed within parenthesis in a UNION query (qiangxue) - Bug #2862: Using `DbCache` while enabling schema caching may cause infinite loops (qiangxue) - Bug #3052: Fixed the issue that cache dependency data is not reused when `reusable` is set true (qiangxue) - Bug #3691: Fixed the issue that `CookieCollection::has` always returns false for cookies from browser (sonicgd) - Bug #4212: MSSQL query builder should not generate the `ORDER BY` clause when it is not needed (qiangxue) - Bug #4232: `TableSchema::sequenceName` for PostgreSQL should remove the enclosing quotes (katzz0, qiangxue) - Bug: Fixed `Call to a member function registerAssetFiles() on a non-object` in case of wrong `sourcePath` for an asset bundle (samdark) - Bug: Fixed incorrect event name for `yii\jui\Spinner` (samdark) - Bug: Json::encode() did not handle objects that implement JsonSerializable interface correctly (cebe) - Bug: Fixed issue with tabular input on ActiveField::radio() and ActiveField::checkbox() (jom) - Bug: Fixed the issue that query cache returns the same data for the same SQL but different query methods (qiangxue) - Bug: Fixed URL parsing so it's now properly giving 404 for URLs like `http://example.com//////site/about` (samdark) - Bug: Fixed `HelpController::getModuleCommands` issue where it attempts to scan a module's controller directory when it doesn't exist (jom) - Bug: Fixed an issue with FileHelper and not accessible directories which resulted in endless loop (cebe) - Bug: Fixed `$model->load($data)` returned `true` if `$data` and `formName` were empty (samdark) - Bug: Fixed issue with `ActiveRelationTrait` preventing `ActiveQuery` from clearing events and behaviors on clone (jom) - Bug: `Query::queryScalar` wasn't making `SELECT DISTINCT` queries subqueries (jom) - Bug: Fixed use `$files` instead of `self::$_files[$key]` to allow inheritance (pgaultier) - Enh #46: Added Image extension based on [Imagine library](http://imagine.readthedocs.org) (tonydspaniard) - Enh #364: Improve Inflector::slug with `intl` transliteration. Improved transliteration char map. (tonydspaniard) - Enh #497: Removed `\yii\log\Target::logUser` and added `\yii\log\Target::prefix` to support customizing message prefix (qiangxue) - Enh #499: Decoupled `Rule` from RBAC `Item` (samdark, qiangxue) - Enh #797: Added support for validating multiple columns by `UniqueValidator` and `ExistValidator` (qiangxue) - Enh #802: Added support for retrieving sub-array element or child object property through `ArrayHelper::getValue()` (qiangxue, cebe) - Enh #938: Added `yii\web\View::renderAjax()` and `yii\web\Controller::renderAjax()` (qiangxue) - Enh #1293: Replaced Console::showProgress() with a better approach. See Console::startProgress() for details (cebe) - Enh #1406: DB Schema support for Oracle Database (p0larbeer, qiangxue) - Enh #1437: Added ListView::viewParams (qiangxue) - Enh #1467: Added support for organizing controllers in subdirectories (qiangxue) - Enh #1469: ActiveRecord::find() now works with default conditions (default scope) applied by createQuery (cebe) - Enh #1476: Add yii\web\Session::handler property (nineinchnick) - Enh #1499: Added `ActionColumn::controller` property to support customizing the controller for handling GridView actions (qiangxue) - Enh #1523: Query conditions now allow to use the NOT operator (cebe) - Enh #1535: Improved `yii\web\User` to start session only when needed. Also prepared it for use without session. (qiangxue) - Enh #1562: Added `yii\bootstrap\Tabs::linkOptions` (kartik-v) - Enh #1572: Added `yii\web\Controller::createAbsoluteUrl()` (samdark) - Enh #1579: throw exception when the given AR relation name does not match in a case sensitive manner (qiangxue) - Enh #1581: Added `ActiveQuery::joinWith()` and `ActiveQuery::innerJoinWith()` to support joining with relations (qiangxue) - Enh #1585: added schema parameter to createAbsoluteUrl() to force 'http' or 'https' (cebe) - Enh #1601: Added support for tagName and encodeLabel parameters in ButtonDropdown (omnilight) - Enh #1611: Added `BaseActiveRecord::markAttributeDirty()` (qiangxue) - Enh #1633: Advanced application template now works with MongoDB by default (samdark) - Enh #1634: Use masked CSRF tokens to prevent BREACH exploits (qiangxue) - Enh #1641: Added `BaseActiveRecord::updateAttributes()` (qiangxue) - Enh #1646: Added postgresql `QueryBuilder::checkIntegrity` and `QueryBuilder::resetSequence` (Ragazzo) - Enh #1645: Added `Connection::$pdoClass` property (Ragazzo) - Enh #1645: Added support for nested DB transactions (qiangxue) - Enh #1681: Added support for automatically adjusting the "for" attribute of label generated by `ActiveField::label()` (qiangxue) - Enh #1706: Added support for registering a single JS/CSS file with dependency (qiangxue) - Enh #1773: keyPrefix property of Cache is not restricted to alnum characters anymore, however it is still recommended (cebe) - Enh #1809: Added support for building "EXISTS" and "NOT EXISTS" query conditions (abdrasulov) - Enh #1839: Added support for getting file extension and basename from uploaded file (anfrantic) - Enh #1852: ActiveRecord::tableName() now returns table name using DbConnection::tablePrefix (creocoder) - Enh #1881: Improved `yii\bootstrap\NavBar` with `containerOptions`, `innerContainerOptions` and `renderInnerContainer` (creocoder) - Enh #1894: The path aliases `@webroot` and `@web` are now available right after the application is initialized (qiangxue) - Enh #1921: Grid view ActionColumn now allow to name buttons like `{controller/action}` (creocoder) - Enh #1973: `yii message/extract` is now able to generate `.po` files (SergeiKutanov, samdark) - Enh #1984: ActionFilter will now mark event as handled when action run is aborted (cebe) - Enh #2002: Added filterWhere() method to yii\db\Query to allow easy addition of search filter conditions by ignoring empty search fields (samdark, cebe) - Enh #2003: Added `filter` property to `ExistValidator` and `UniqueValidator` to support adding additional filtering conditions (qiangxue) - Enh #2008: `yii message/extract` is now able to save translation strings to database (kate-kate, samdark) - Enh #2043: Added support for custom request body parsers (danschmidt5189, cebe) - Enh #2051: Do not save null data into database when using RBAC (qiangxue) - Enh #2054: Added support for using custom application configuration with the console command runner (qiangxue) - Enh #2079: - i18n now falls back to `en` from `en-US` if message translation isn't found (samdark) - View now falls back to `en` from `en-US` if file not found (samdark) - Default `sourceLanguage` and `language` are now `en` (samdark) - Enh #2101: Gii is now using model labels when generating search (thiagotalma) - Enh #2102: DetailView now allow use `category.name` as attribute name (creocoder) - Enh #2102: DetailView now allow use custom label in string format like `name:format:label` (creocoder) - Enh #2103: Renamed AccessDeniedHttpException to ForbiddenHttpException, added new commonly used HTTP exception classes (danschmidt5189) - Enh #2124: Added support for UNION ALL queries (Ivan Pomortsev, iworker) - Enh #2132: Allow url of CSS and JS files registered in yii\web\View to be url alias (cebe) - Enh #2144: `Html` helper now supports rendering "data" attributes (qiangxue) - Enh #2156: `yii migrate` now automatically creates `migrations` directory if it does not exist (samdark) - Enh #2211: Added typecast database types into php types (dizews) - Enh #2240: Improved `yii\web\AssetManager::publish()`, `yii\web\AssetManager::getPublishedPath()` and `yii\web\AssetManager::getPublishedUrl()` to support aliases (vova07) - Enh #2325: Adding support for the `X-HTTP-Method-Override` header in `yii\web\Request::getMethod()` (pawzar) - Enh #2364: Take into account current error reporting level in error handler (gureedo) - Enh #2387: Added support for fetching data from database in batches (nineinchnick, qiangxue) - Enh #2392: Added `addCssStyle()`, `removeCssStyle()`, `cssStyleFromArray()` and `cssStyleToArray()` to `Html` (qiangxue, kartik-v, Alex-Code) - Enh #2406: Added support for conditional validation (drenty, cebe, qiangxue) - Enh #2411: Added Gii extension generator (schmunk42) - Enh #2415: Added support for inverse relations (qiangxue) - Enh #2417: Added possibility to set `dataType` for `$.ajax` call in yii.activeForm.js (Borales) - Enh #2436: Label of the attribute, which looks like `relatedModel.attribute`, will be received from the related model if it available (djagya) - Enh #2490: `yii\db\Query::count()` and other query scalar methods now properly handle queries with GROUP BY clause (qiangxue) - Enh #2491: Added support for using the same base class name of search model and data model in Gii (qiangxue) - Enh #2499: Added ability to downgrade migrations by their absolute apply time (resurtm, gorcer) - Enh #2525: Added support for formatting file sizes with `yii\base\Formatter` (VinceG) - Enh #2526: Allow for null values in batchInsert (skotos) - Enh #2646: Added support for specifying hostinfo in the pattern of a URL rule (qiangxue) - Enh #2661: Added boolean column type support for SQLite (qiangxue) - Enh #2670: Changed `console\Controller::globalOptions()` to `options($actionId)` to (make it possible to) differentiate options per action (hqx) - Enh #2714: Added support for formatting time intervals relative to the current time with `yii\base\Formatter` (drenty) - Enh #2726: Added `yii\db\ActiveRecord::loadDefaultValues()` that fills default values from DB schema (samdark) - Enh #2729: Added `FilterValidator::skipOnArray` so that filters like `trim` will not fail for array inputs (qiangxue) - Enh #2735: Added support for `DateTimeInterface` in `Formatter` (ivokund) - Enh #2756: Added support for injecting custom `isEmpty` check for all validators (qiangxue) - Enh #2775: Added `yii\base\Application::bootstrap` and `yii\base\BootstrapInterface` to support running bootstrap classes when starting an application (qiangxue) - Enh #2892: ActiveRecord dirty attributes are now reset after call to `afterSave()` so information about changed attributes is available in `afterSave`-event (cebe) - Enh #2910: Added `Application::end()` (qiangxue) - Enh: Added support for using arrays as option values for console commands (qiangxue) - Enh: Added `favicon.ico` and `robots.txt` to default application templates (samdark) - Enh: Added `Widget::autoIdPrefix` to support prefixing automatically generated widget IDs (qiangxue) - Enh: Support for file aliases in console command 'message' (omnilight) - Enh: Sort and Pagination can now create absolute URLs (cebe) - Enh: Added support for using array-typed arguments for console commands (qiangxue) - Enh: Added support for installing packages conforming to PSR-4 standard (qiangxue) - Enh: Better exception message when class cannot be loaded (samdark) - Enh: `init` of advanced application now allows to specify answer for overwriting files via `init --overwrite=n` (samdark) - Enh: Added `TableSchema::fullName` property (qiangxue) - Enh: yii\codeception\TestCase now supports loading and using fixtures via Yii fixture framework (qiangxue) - Enh: Added ability to get incoming headers (dizews) - Enh: Added `beforeRun()` and `afterRun()` to `yii\base\Action` (qiangxue) - Enh: Added support for using timeZone with `yii\base\Formatter` (dizews) - Enh: Added `yii\web\View::POS_LOAD` (qiangxue) - Enh: Added `yii\web\Response::clearOutputBuffers()` (qiangxue) - Enh: Improved `QueryBuilder::buildLimit()` to support big numbers (qiangxue) - Enh: Added support for building SQLs with sub-queries (qiangxue) - Enh: Added `Pagination::getLinks()` (qiangxue) - Enh: Added support for reading page size from query parameters by `Pagination` (qiangxue) - Enh: LinkPager can now register relational link tags in the html header for prev, next, first and last page (cebe) - Enh: Added `yii\web\UrlRuleInterface` and `yii\web\CompositeUrlRule` (qiangxue) - Enh: Added `yii\web\Request::getAuthUser()` and `getAuthPassword()` (qiangxue) - Enh: Added summaryOptions and emptyTextOptions to BaseListView (johonunu) - Enh: Implemented Oracle column comment reading from another schema (gureedo, samdark) - Enh: Added support to allow an event handler to be inserted at the beginning of the existing event handler list (qiangxue) - Enh: Improved action filter and action execution flow by supporting installing action filters at controller, module and application levels (qiangxue) - Enh: Added `isAssociative()` and `isIndexed()` to `yii\helpers\ArrayHelper` (qiangxue) - Enh: Added `addSelect` to `yii\db\Query` (Alex-Code) - Enh: Added ODBC support in `yii\db\Connection` (nineinchnick, resurtm) - Chg #47: Changed Markdown library to cebe/markdown and adjusted Markdown helper API (cebe) - Chg #735: Added back `ActiveField::hiddenInput()` (qiangxue) - Chg #1186: Changed `Sort` to use comma to separate multiple sort fields and use negative sign to indicate descending sort (qiangxue) - Chg #1519: `yii\web\User::loginRequired()` now returns the `Response` object instead of exiting the application (qiangxue) - Chg #1564: Removed `yii\web\Session::autoStart` and added `hasSessionId`. Session will be automatically started when accessing session data (qiangxue) - Chg #1586: `QueryBuilder::buildLikeCondition()` will now escape special characters and use percentage characters by default (qiangxue) - Chg #1610: `Html::activeCheckboxList()` and `Html::activeRadioList()` will submit an empty string if no checkbox/radio is selected (qiangxue) - Chg #1643: Added default value for `Captcha::options` (qiangxue) - Chg #1796: Removed `yii\base\Controller::getActionParams()` (samdark) - Chg #1835: `CheckboxColumn` now renders checkboxes whose values are the corresponding data key values (qiangxue) - Chg #1821: Changed default values for yii\db\Connection username and password to null (cebe) - Chg #1844: `Response::sendFile()` and other file sending methods will not send the response (qiangxue) - Chg #1852: DbConnection::tablePrefix default value now 'tbl_' (creocoder) - Chg #1958: `beforeSubmit` in `yii.activeform` is now executed after validation and before form submission (6pblcb) - Chg #2025: Removed ability to declare scopes in ActiveRecord (samdark) - Chg #2043: - Renamed `yii\web\Request::acceptedLanguages` to `acceptableLanguages` (qiangxue) - Removed `yii\web\Request::getPost()`, `getPut()`, `getDelete()`, `getPatch()` in favor of `getBodyParam()` (cebe) - Renamed `yii\web\Request::get()` to `getQueryParams()` and `getRestParams()` to `getBodyParams()` (cebe) - Added `yii\web\Request::get($name = null, $defaultValue = null)` and `yii\web\Request::post($name = null, $defaultValue = null)` (samdark) - Chg #2059: Implemented git-flavored file excluding/filtering for `FileHelper` (nineinchnick) - Chg #2063: Removed `yii\web\Request::acceptTypes` and renamed `yii\web\Request::acceptedContentTypes` to `acceptableContentTypes` (qiangxue) - Chg #2103: Renamed AccessDeniedHttpException to ForbiddenHttpException (danschmidt5189) - Chg #2146: Removed `ActiveRelation` class and `ActiveRelationInterface`, moved the functionality to `ActiveQuery`. All relational queries are now directly served by `ActiveQuery` allowing to use custom scopes in relations and also to declare arbitrary queries as relations. Also removed `ActiveRecordInterface::createActiveRelation()` (cebe) - Chg #2157: The '*' category pattern will match all categories that do not match any other patterns listed in `I18N::translations` (qiangxue, Ragazzo) - Chg #2161: Added ability to use `return` in `Widget::run` (samdark) - Chg #2173: Removed `StringHelper::diff()`, Moved `phpspec/php-diff` dependency from `yiisoft/yii2` to `yiisoft/yii2-gii` (samdark) - Chg #2175: QueryBuilder will now append UNION statements at the end of the primary SQL (qiangxue) - Chg #2210: Mysql driver will now treat `tinyint(1)` as integer instead of boolean (qiangxue) - Chg #2248: Renamed `yii\base\Model::DEFAULT_SCENARIO` to `yii\base\Model::SCENARIO_DEFAULT` (samdark) - Chg #2281: Renamed `ActiveRecord::create()` to `populateRecord()` and changed signature. This method will not call instantiate() anymore (cebe) - Chg #2405: The CSS class of `MaskedInput` now defaults to `form-control` (qiangxue) - Chg #2426: Changed URL creation method signatures to be consistent (samdark) - Chg #2516: Moved error handling from application to ErrorHandler class and fixed problems with HTTP Exception response code (cebe) - `Yii::$app->exception` has now moved to `Yii::$app->errorHandler->exception` - `yii\base\ErrorHandler` was split into `yii\web\ErrorHandler` and `yii\console\ErrorHandler` - Chg #2544: Changed `DetailView`'s `name:format:label` to `attribute:format:label` to match `GridView` (samdark) - Chg #2603: `yii\base\ErrorException` now extends `\ErrorException` (samdark) - Chg #2629: `Module::controllerPath` is now read only, and all controller classes must be namespaced under `Module::controllerNamespace`. (qiangxue) - Chg #2630: API changes for URLs generation (samdark, qiangxue, cebe) - Added `yii\helpers\Url`. - Removed `yii\helpers\Html::url`, use `yii\helpers\Url::to` instead. - Removed `yii\web\Controller::createUrl` and `yii\web\Controller::createAbsoluteUrl`, use `yii\helpers\Url::toRoute` instead. - Removed `yii\web\Controller::getCanonicalUrl`, use `yii\helpers\Url::canonical` instead. - Chg #2691: Null parameters will not be included in the generated URLs by `UrlManager` (gonimar, qiangxue) - Chg #2734: `FileCache::keyPrefix` defaults to empty string now (qiangxue) - Chg #2796: Removed `Application::preload` in favor of `Application::bootstrap` (qiangxue) - Chg #2816: Changed default date and time format of `yii\base\Formatter` to `Y-m-d` and `H:i:s` (qiangxue) - Chg #2911: Removed `tbl_` default for table prefix (samdark) - Chg #2912: Relative view files will be looked for under the directory containing the view currently being rendered (qiangxue) - Chg #2955: Changed the signature of ActiveQuery constructors and replaced `ActiveRecord::createQuery()` with `find()` to simplify customizing ActiveQuery classes (qiangxue) - Chg #2999: Added `findOne()` and `findAll()` to replace the usage of `ActiveRecord::find($condition)`. (samdark, qiangxue) - Chg #4204: `yii\web\Request::getUserIP()` will return null if it cannot detect user IP address (qiangxue) - Chg: Renamed `yii\jui\Widget::clientEventsMap` to `clientEventMap` (qiangxue) - Chg: Renamed `ActiveRecord::getPopulatedRelations()` to `getRelatedRecords()` (qiangxue) - Chg: Renamed `attributeName` and `className` to `targetAttribute` and `targetClass` for `UniqueValidator` and `ExistValidator` (qiangxue) - Chg: Added `yii\widgets\InputWidget::options` (qiangxue) - Chg: Changed the signature of `urlCreator` and button creators for `yii\gridview\ActionColumn` (qiangxue) - Chg: Updated HTMLPurified dependency to `4.6.*`. - Chg: Changed Yii autoloader to support loading PSR-4 classes only (i.e. PEAR-styled classes not supported anymore) (qiangxue) - Chg: Changed the directory structure according to PSR-4. You have to update your application `index.php`, `index-test.php` and `yii` files to point to the new location of `Yii.php` (qiangxue, cebe) - Chg: Advanced app template: moved database connection DSN, login and password to `-local` config not to expose it to VCS (samdark) - Chg: Renamed `yii\web\Request::acceptedLanguages` to `acceptableLanguages` (qiangxue) - Chg: Removed implementation of `Arrayable` from `yii\Object` (qiangxue) - Chg: The scripts in asset bundles are now registered in `View` at the end of `endBody()`. It was done in `endPage()` previously (qiangxue) - Chg: Renamed `csrf-var` to `csrf-param` for CSRF header name (Dilip) - Chg: The directory holding email templates is renamed from `mails` to `mail` (qiangxue) - Chg: Renamed properties `fooVar` to `fooParam` for various classes (qiangxue) - Renamed `ActiveForm::ajaxVar` to `ajaxParam` - Renamed `Pagination::pageVar` to `pageParam` - Renamed `Sort::sortVar` to `sortParam` - Renamed `yii\web\Request::csrfVar` to `csrfParam` - Renamed `yii\web\Request::methodVar` to `methodParam` - Renamed `UrlManager::routeVar` to `routeParam` - Renamed `yii\web\Session::flashVar` to `flashParam` - Renamed `yii\web\User::idVar` to `idParam` - Renamed `yii\web\User::authTimeoutVar` to `authTimeoutParam` - Renamed `yii\web\User::returnUrlVar` to `returnUrlParam` - Chg: Added `View::viewFile` and removed `ViewEvent::viewFile` (qiangxue) - Chg: Changed `Controller::afterAction()`, `Module::afterAction()` and `ActionFilter::afterAction()` to pass `$result` by value instead of reference (qiangxue) - Chg: `yii\base\Extension::init()` is renamed to `bootstrap()` (qiangxue) - Chg: `getComponent()` and `setComponent()` in `Application` and `Module` are renamed to `get()` and `set()` respectively. (qiangxue) - Chg: The signature of `Yii::createObject()` is changed. Constructor parameters must be passed as the second parameter. (qiangxue) - Chg: `Yii::$objectConfig` is removed. You should use `Yii::$container->set()` to configure default settings of classes. (qiangxue) - Chg: Removed `yii\grid\Column::getDataCellContent()` and renamed `yii\grid\DataColumn::getDataCellContent()` to `yii\grid\DataColumn::getDataCellValue()` (cebe) - Chg: `yii\log\Logger` is split into `yii\log\Logger` and `yii\log\Dispatcher`. (qiangxue) - Chg: Moved all filter classes to namespace `yii\filters` (qiangxue) - Chg: Re-implemented RBAC by following more closely to the original NIST RBAC model. Dropped `yii\rbac\PhpManager`. (qiangxue) - Chg: Renamed `yii\web\User::checkAccess()` to `yii\web\User::can()` (qiangxue) - New #66: [Auth client library](https://github.com/yiisoft/yii2-authclient) OpenId, OAuth1, OAuth2 clients (klimov-paul) - New #303: Added built-in support for REST API (qiangxue) - New #503: Added `yii\di\Container` and `yii\di\ServiceLocator` (qiangxue) - New #706: Added `yii\widgets\Pjax` and enhanced `GridView` to work with `Pjax` to support AJAX-update (qiangxue) - New #1393: [Codeception testing framework integration](https://github.com/yiisoft/yii2-codeception) (Ragazzo) - New #1438: [MongoDB integration](https://github.com/yiisoft/yii2-mongodb) ActiveRecord and Query (klimov-paul) - New #1956: Implemented test fixture framework (qiangxue) - New #2034: Added `ContentNegotiator` to support response format and language negotiation (qiangxue) - New #2149: Added `yii\base\DynamicModel` to support ad-hoc data validation (qiangxue) - New #2360: Added `AttributeBehavior` and `BlameableBehavior`, and renamed `AutoTimestamp` to `TimestampBehavior` (lucianobaraglia, qiangxue) - New #2932: Added `yii\web\ViewAction` that allow you to render views based on GET parameter (samdark) - New #2998: Added `framework\log\SyslogTarget` that is able to write log to syslog (miramir, samdark) - New #3029: Added `yii\bootstrap\ActiveForm` and `yii\bootstrap\ActiveField` (mikehaertl) - New: Yii framework now comes with core messages translated into 26 languages, many thanks to all our translators! - New: Added `yii\codeception\DbTestCase` (qiangxue) - New: Added `yii\web\GroupUrlRule` (qiangxue) - New: Added `yii\filters\RateLimiter` (qiangxue) - New: Added various authentication methods, including `HttpBasicAuth`, `HttpBearerAuth`, `QueryParamAuth`, and `CompositeAuth` (qiangxue) - New: Added `HtmlResponseFormatter` and `JsonResponseFormatter` (qiangxue) 2.0.0-alpha, December 1, 2013 ----------------------------- - Initial release. - Official extensions released in this version: - [Twitter bootstrap 3.0](https://github.com/yiisoft/yii2-bootstrap) - [Jquery UI](https://github.com/yiisoft/yii2-jui) - [Debug Toolbar](https://github.com/yiisoft/yii2-debug) - [Gii code generator](https://github.com/yiisoft/yii2-gii) - [Elasticsearch integration](https://github.com/yiisoft/yii2-elasticsearch): ActiveRecord and Query - [Redis integration](https://github.com/yiisoft/yii2-redis): ActiveRecord, Cache and Session - [Sphinx integration](https://github.com/yiisoft/yii2-sphinx): ActiveRecord and Query - [Swiftmailer](https://github.com/yiisoft/yii2-swiftmailer) - [Smarty View Renderer](https://github.com/yiisoft/yii2-smarty) - [Twig View Renderer](https://github.com/yiisoft/yii2-twig)