Browse Source

Merge branch 'master' into cache-mset

tags/2.0.0-beta
Panagiotis Moustafellos 11 years ago
parent
commit
6e538ac63a
  1. 10
      apps/advanced/backend/views/layouts/main.php
  2. 4
      apps/advanced/backend/views/site/error.php
  3. 10
      apps/advanced/backend/views/site/login.php
  4. 10
      apps/advanced/frontend/views/layouts/main.php
  5. 4
      apps/advanced/frontend/views/site/about.php
  6. 12
      apps/advanced/frontend/views/site/contact.php
  7. 4
      apps/advanced/frontend/views/site/error.php
  8. 10
      apps/advanced/frontend/views/site/login.php
  9. 6
      apps/advanced/frontend/views/site/requestPasswordResetToken.php
  10. 6
      apps/advanced/frontend/views/site/resetPassword.php
  11. 10
      apps/advanced/frontend/views/site/signup.php
  12. 12
      apps/basic/tests/acceptance/WebGuy.php
  13. 8
      apps/basic/tests/functional/TestGuy.php
  14. 10
      apps/basic/views/layouts/main.php
  15. 4
      apps/basic/views/site/about.php
  16. 12
      apps/basic/views/site/contact.php
  17. 4
      apps/basic/views/site/error.php
  18. 8
      apps/basic/views/site/login.php
  19. 15
      docs/api/db/ActiveRecord.md
  20. 20
      docs/guide/active-record.md
  21. 2
      docs/guide/i18n.md
  22. 49
      docs/guide/installation.md
  23. 6
      docs/guide/upgrade-from-v1.md
  24. 113
      docs/guide/url.md
  25. 16
      docs/guide/view.md
  26. 8
      extensions/composer/yii/composer/Installer.php
  27. 2
      extensions/composer/yii/composer/InstallerPlugin.php
  28. 2
      extensions/jui/composer.json
  29. 2
      extensions/mutex/composer.json
  30. 4
      extensions/smarty/composer.json
  31. 4
      extensions/twig/composer.json
  32. 3
      framework/yii/BaseYii.php
  33. 70
      framework/yii/base/Application.php
  34. 10
      framework/yii/base/Extension.php
  35. 14
      framework/yii/base/Module.php
  36. 4
      framework/yii/base/View.php
  37. 26
      framework/yii/db/ActiveRecord.php
  38. 10
      framework/yii/debug/views/default/index.php
  39. 10
      framework/yii/debug/views/default/toolbar.php
  40. 4
      framework/yii/debug/views/default/view.php
  41. 4
      framework/yii/debug/views/layouts/main.php
  42. 8
      framework/yii/gii/generators/controller/templates/controller.php
  43. 6
      framework/yii/gii/generators/controller/templates/view.php
  44. 12
      framework/yii/gii/generators/crud/Generator.php
  45. 58
      framework/yii/gii/generators/crud/templates/controller.php
  46. 18
      framework/yii/gii/generators/crud/templates/search.php
  47. 12
      framework/yii/gii/generators/crud/templates/views/_form.php
  48. 16
      framework/yii/gii/generators/crud/templates/views/_search.php
  49. 12
      framework/yii/gii/generators/crud/templates/views/create.php
  50. 24
      framework/yii/gii/generators/crud/templates/views/index.php
  51. 14
      framework/yii/gii/generators/crud/templates/views/update.php
  52. 18
      framework/yii/gii/generators/crud/templates/views/view.php
  53. 6
      framework/yii/gii/generators/form/templates/action.php
  54. 16
      framework/yii/gii/generators/form/templates/form.php
  55. 20
      framework/yii/gii/generators/model/templates/model.php
  56. 2
      framework/yii/gii/generators/module/templates/controller.php
  57. 6
      framework/yii/gii/generators/module/templates/module.php
  58. 12
      framework/yii/gii/generators/module/templates/view.php
  59. 2
      framework/yii/gii/views/default/diff.php
  60. 6
      framework/yii/gii/views/default/index.php
  61. 8
      framework/yii/gii/views/default/view.php
  62. 6
      framework/yii/gii/views/default/view/files.php
  63. 2
      framework/yii/gii/views/default/view/results.php
  64. 2
      framework/yii/gii/views/layouts/generator.php
  65. 6
      framework/yii/gii/views/layouts/main.php
  66. 12
      framework/yii/requirements/views/web/index.php
  67. 8
      framework/yii/views/errorHandler/callStackItem.php
  68. 8
      framework/yii/views/errorHandler/error.php
  69. 18
      framework/yii/views/errorHandler/exception.php
  70. 12
      framework/yii/views/errorHandler/previousException.php
  71. 4
      framework/yii/views/migration.php
  72. 15
      framework/yii/web/AssetBundle.php
  73. 6
      framework/yii/web/AssetManager.php
  74. 1
      framework/yii/web/User.php
  75. 2
      tests/unit/data/ar/Customer.php
  76. 8
      tests/unit/data/ar/Order.php
  77. 4
      tests/unit/data/ar/OrderItem.php
  78. 2
      tests/unit/data/views/layout.php

10
apps/advanced/backend/views/layouts/main.php

@ -15,8 +15,8 @@ AppAsset::register($this);
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="<?=Yii::$app->charset; ?>"/> <meta charset="<?= Yii::$app->charset ?>"/>
<title><?=Html::encode($this->title); ?></title> <title><?= Html::encode($this->title) ?></title>
<?php $this->head(); ?> <?php $this->head(); ?>
</head> </head>
<body> <body>
@ -48,13 +48,13 @@ AppAsset::register($this);
<?=Breadcrumbs::widget([ <?=Breadcrumbs::widget([
'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], 'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
]); ?> ]); ?>
<?=$content; ?> <?= $content ?>
</div> </div>
<footer class="footer"> <footer class="footer">
<div class="container"> <div class="container">
<p class="pull-left">&copy; My Company <?=date('Y'); ?></p> <p class="pull-left">&copy; My Company <?= date('Y') ?></p>
<p class="pull-right"><?=Yii::powered(); ?></p> <p class="pull-right"><?= Yii::powered() ?></p>
</div> </div>
</footer> </footer>

4
apps/advanced/backend/views/site/error.php

@ -13,10 +13,10 @@ $this->title = $name;
?> ?>
<div class="site-error"> <div class="site-error">
<h1><?=Html::encode($this->title); ?></h1> <h1><?= Html::encode($this->title) ?></h1>
<div class="alert alert-danger"> <div class="alert alert-danger">
<?=nl2br(Html::encode($message)); ?> <?= nl2br(Html::encode($message)) ?>
</div> </div>
<p> <p>

10
apps/advanced/backend/views/site/login.php

@ -11,18 +11,18 @@ $this->title = 'Login';
$this->params['breadcrumbs'][] = $this->title; $this->params['breadcrumbs'][] = $this->title;
?> ?>
<div class="site-login"> <div class="site-login">
<h1><?=Html::encode($this->title); ?></h1> <h1><?= Html::encode($this->title) ?></h1>
<p>Please fill out the following fields to login:</p> <p>Please fill out the following fields to login:</p>
<div class="row"> <div class="row">
<div class="col-lg-5"> <div class="col-lg-5">
<?php $form = ActiveForm::begin(['id' => 'login-form']); ?> <?php $form = ActiveForm::begin(['id' => 'login-form']); ?>
<?=$form->field($model, 'username'); ?> <?= $form->field($model, 'username') ?>
<?=$form->field($model, 'password')->passwordInput(); ?> <?= $form->field($model, 'password')->passwordInput() ?>
<?=$form->field($model, 'rememberMe')->checkbox(); ?> <?= $form->field($model, 'rememberMe')->checkbox() ?>
<div class="form-group"> <div class="form-group">
<?=Html::submitButton('Login', ['class' => 'btn btn-primary']); ?> <?= Html::submitButton('Login', ['class' => 'btn btn-primary']) ?>
</div> </div>
<?php ActiveForm::end(); ?> <?php ActiveForm::end(); ?>
</div> </div>

10
apps/advanced/frontend/views/layouts/main.php

@ -16,8 +16,8 @@ AppAsset::register($this);
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="<?=Yii::$app->charset; ?>"/> <meta charset="<?= Yii::$app->charset ?>"/>
<title><?=Html::encode($this->title); ?></title> <title><?= Html::encode($this->title) ?></title>
<?php $this->head(); ?> <?php $this->head(); ?>
</head> </head>
<body> <body>
@ -53,13 +53,13 @@ AppAsset::register($this);
'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], 'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
]); ?> ]); ?>
<?=Alert::widget()?> <?=Alert::widget()?>
<?=$content; ?> <?= $content ?>
</div> </div>
<footer class="footer"> <footer class="footer">
<div class="container"> <div class="container">
<p class="pull-left">&copy; My Company <?=date('Y'); ?></p> <p class="pull-left">&copy; My Company <?= date('Y') ?></p>
<p class="pull-right"><?=Yii::powered(); ?></p> <p class="pull-right"><?= Yii::powered() ?></p>
</div> </div>
</footer> </footer>

4
apps/advanced/frontend/views/site/about.php

@ -8,9 +8,9 @@ $this->title = 'About';
$this->params['breadcrumbs'][] = $this->title; $this->params['breadcrumbs'][] = $this->title;
?> ?>
<div class="site-about"> <div class="site-about">
<h1><?=Html::encode($this->title); ?></h1> <h1><?= Html::encode($this->title) ?></h1>
<p>This is the About page. You may modify the following file to customize its content:</p> <p>This is the About page. You may modify the following file to customize its content:</p>
<code><?=__FILE__; ?></code> <code><?= __FILE__ ?></code>
</div> </div>

12
apps/advanced/frontend/views/site/contact.php

@ -12,7 +12,7 @@ $this->title = 'Contact';
$this->params['breadcrumbs'][] = $this->title; $this->params['breadcrumbs'][] = $this->title;
?> ?>
<div class="site-contact"> <div class="site-contact">
<h1><?=Html::encode($this->title); ?></h1> <h1><?= Html::encode($this->title) ?></h1>
<p> <p>
If you have business inquiries or other questions, please fill out the following form to contact us. Thank you. If you have business inquiries or other questions, please fill out the following form to contact us. Thank you.
@ -21,16 +21,16 @@ $this->params['breadcrumbs'][] = $this->title;
<div class="row"> <div class="row">
<div class="col-lg-5"> <div class="col-lg-5">
<?php $form = ActiveForm::begin(['id' => 'contact-form']); ?> <?php $form = ActiveForm::begin(['id' => 'contact-form']); ?>
<?=$form->field($model, 'name'); ?> <?= $form->field($model, 'name') ?>
<?=$form->field($model, 'email'); ?> <?= $form->field($model, 'email') ?>
<?=$form->field($model, 'subject'); ?> <?= $form->field($model, 'subject') ?>
<?=$form->field($model, 'body')->textArea(['rows' => 6]); ?> <?= $form->field($model, 'body')->textArea(['rows' => 6]) ?>
<?=$form->field($model, 'verifyCode')->widget(Captcha::className(), [ <?=$form->field($model, 'verifyCode')->widget(Captcha::className(), [
'options' => ['class' => 'form-control'], 'options' => ['class' => 'form-control'],
'template' => '<div class="row"><div class="col-lg-3">{image}</div><div class="col-lg-6">{input}</div></div>', 'template' => '<div class="row"><div class="col-lg-3">{image}</div><div class="col-lg-6">{input}</div></div>',
]); ?> ]); ?>
<div class="form-group"> <div class="form-group">
<?=Html::submitButton('Submit', ['class' => 'btn btn-primary']); ?> <?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
</div> </div>
<?php ActiveForm::end(); ?> <?php ActiveForm::end(); ?>
</div> </div>

4
apps/advanced/frontend/views/site/error.php

@ -13,10 +13,10 @@ $this->title = $name;
?> ?>
<div class="site-error"> <div class="site-error">
<h1><?=Html::encode($this->title); ?></h1> <h1><?= Html::encode($this->title) ?></h1>
<div class="alert alert-danger"> <div class="alert alert-danger">
<?=nl2br(Html::encode($message)); ?> <?= nl2br(Html::encode($message)) ?>
</div> </div>
<p> <p>

10
apps/advanced/frontend/views/site/login.php

@ -11,21 +11,21 @@ $this->title = 'Login';
$this->params['breadcrumbs'][] = $this->title; $this->params['breadcrumbs'][] = $this->title;
?> ?>
<div class="site-login"> <div class="site-login">
<h1><?=Html::encode($this->title); ?></h1> <h1><?= Html::encode($this->title) ?></h1>
<p>Please fill out the following fields to login:</p> <p>Please fill out the following fields to login:</p>
<div class="row"> <div class="row">
<div class="col-lg-5"> <div class="col-lg-5">
<?php $form = ActiveForm::begin(['id' => 'login-form']); ?> <?php $form = ActiveForm::begin(['id' => 'login-form']); ?>
<?=$form->field($model, 'username'); ?> <?= $form->field($model, 'username') ?>
<?=$form->field($model, 'password')->passwordInput(); ?> <?= $form->field($model, 'password')->passwordInput() ?>
<?=$form->field($model, 'rememberMe')->checkbox(); ?> <?= $form->field($model, 'rememberMe')->checkbox() ?>
<div style="color:#999;margin:1em 0"> <div style="color:#999;margin:1em 0">
If you forgot your password you can <?=Html::a('reset it', ['site/request-password-reset'])?>. If you forgot your password you can <?=Html::a('reset it', ['site/request-password-reset'])?>.
</div> </div>
<div class="form-group"> <div class="form-group">
<?=Html::submitButton('Login', ['class' => 'btn btn-primary']); ?> <?= Html::submitButton('Login', ['class' => 'btn btn-primary']) ?>
</div> </div>
<?php ActiveForm::end(); ?> <?php ActiveForm::end(); ?>
</div> </div>

6
apps/advanced/frontend/views/site/requestPasswordResetToken.php

@ -11,16 +11,16 @@ $this->title = 'Request password reset';
$this->params['breadcrumbs'][] = $this->title; $this->params['breadcrumbs'][] = $this->title;
?> ?>
<div class="site-request-password-reset"> <div class="site-request-password-reset">
<h1><?=Html::encode($this->title); ?></h1> <h1><?= Html::encode($this->title) ?></h1>
<p>Please fill out your email. A link to reset password will be sent there.</p> <p>Please fill out your email. A link to reset password will be sent there.</p>
<div class="row"> <div class="row">
<div class="col-lg-5"> <div class="col-lg-5">
<?php $form = ActiveForm::begin(['id' => 'request-password-reset-form']); ?> <?php $form = ActiveForm::begin(['id' => 'request-password-reset-form']); ?>
<?=$form->field($model, 'email'); ?> <?= $form->field($model, 'email') ?>
<div class="form-group"> <div class="form-group">
<?=Html::submitButton('Send', ['class' => 'btn btn-primary']); ?> <?= Html::submitButton('Send', ['class' => 'btn btn-primary']) ?>
</div> </div>
<?php ActiveForm::end(); ?> <?php ActiveForm::end(); ?>
</div> </div>

6
apps/advanced/frontend/views/site/resetPassword.php

@ -11,16 +11,16 @@ $this->title = 'Reset password';
$this->params['breadcrumbs'][] = $this->title; $this->params['breadcrumbs'][] = $this->title;
?> ?>
<div class="site-reset-password"> <div class="site-reset-password">
<h1><?=Html::encode($this->title); ?></h1> <h1><?= Html::encode($this->title) ?></h1>
<p>Please choose your new password:</p> <p>Please choose your new password:</p>
<div class="row"> <div class="row">
<div class="col-lg-5"> <div class="col-lg-5">
<?php $form = ActiveForm::begin(['id' => 'reset-password-form']); ?> <?php $form = ActiveForm::begin(['id' => 'reset-password-form']); ?>
<?=$form->field($model, 'password')->passwordInput(); ?> <?= $form->field($model, 'password')->passwordInput() ?>
<div class="form-group"> <div class="form-group">
<?=Html::submitButton('Save', ['class' => 'btn btn-primary']); ?> <?= Html::submitButton('Save', ['class' => 'btn btn-primary']) ?>
</div> </div>
<?php ActiveForm::end(); ?> <?php ActiveForm::end(); ?>
</div> </div>

10
apps/advanced/frontend/views/site/signup.php

@ -11,18 +11,18 @@ $this->title = 'Signup';
$this->params['breadcrumbs'][] = $this->title; $this->params['breadcrumbs'][] = $this->title;
?> ?>
<div class="site-signup"> <div class="site-signup">
<h1><?=Html::encode($this->title); ?></h1> <h1><?= Html::encode($this->title) ?></h1>
<p>Please fill out the following fields to signup:</p> <p>Please fill out the following fields to signup:</p>
<div class="row"> <div class="row">
<div class="col-lg-5"> <div class="col-lg-5">
<?php $form = ActiveForm::begin(['id' => 'form-signup']); ?> <?php $form = ActiveForm::begin(['id' => 'form-signup']); ?>
<?=$form->field($model, 'username'); ?> <?= $form->field($model, 'username') ?>
<?=$form->field($model, 'email'); ?> <?= $form->field($model, 'email') ?>
<?=$form->field($model, 'password')->passwordInput(); ?> <?= $form->field($model, 'password')->passwordInput() ?>
<div class="form-group"> <div class="form-group">
<?=Html::submitButton('Signup', ['class' => 'btn btn-primary']); ?> <?= Html::submitButton('Signup', ['class' => 'btn btn-primary']) ?>
</div> </div>
<?php ActiveForm::end(); ?> <?php ActiveForm::end(); ?>
</div> </div>

12
apps/basic/tests/acceptance/WebGuy.php

@ -36,7 +36,7 @@ class WebGuy extends \Codeception\AbstractGuy
* *
* ``` php * ``` php
* <?php * <?php
* $I->submitForm('#login', array('login' => 'davert', 'password' => '123456')); * $I->submitForm('#login', ['login' => 'davert', 'password' => '123456']);
* *
* ``` * ```
* *
@ -55,7 +55,7 @@ class WebGuy extends \Codeception\AbstractGuy
* *
* ``` php * ``` php
* <?php * <?php
* $I->submitForm('#userForm', array('user' => array('login' => 'Davert', 'password' => '123456', 'agree' => true))); * $I->submitForm('#userForm', ['user' => ['login' => 'Davert', 'password' => '123456', 'agree' => true]]);
* *
* ``` * ```
* Note, that pricing plan will be set to Paid, as it's selected on page. * Note, that pricing plan will be set to Paid, as it's selected on page.
@ -89,8 +89,8 @@ class WebGuy extends \Codeception\AbstractGuy
* *
* ``` php * ``` php
* <?php * <?php
* $I->sendAjaxPostRequest('/updateSettings', array('notifications' => true); // POST * $I->sendAjaxPostRequest('/updateSettings', ['notifications' => true]; // POST
* $I->sendAjaxGetRequest('/updateSettings', array('notifications' => true); // GET * $I->sendAjaxGetRequest('/updateSettings', ['notifications' => true]; // GET
* *
* ``` * ```
* *
@ -202,12 +202,12 @@ class WebGuy extends \Codeception\AbstractGuy
* // from the official Guzzle manual * // from the official Guzzle manual
* $I->amGoingTo('Sign all requests with OAuth'); * $I->amGoingTo('Sign all requests with OAuth');
* $I->executeInGuzzle(function (\Guzzle\Http\Client $client) { * $I->executeInGuzzle(function (\Guzzle\Http\Client $client) {
* $client->addSubscriber(new Guzzle\Plugin\Oauth\OauthPlugin(array( * $client->addSubscriber(new Guzzle\Plugin\Oauth\OauthPlugin([
* 'consumer_key' => '***', * 'consumer_key' => '***',
* 'consumer_secret' => '***', * 'consumer_secret' => '***',
* 'token' => '***', * 'token' => '***',
* 'token_secret' => '***' * 'token_secret' => '***'
* ))); * ]));
* }); * });
* ?> * ?>
* ``` * ```

8
apps/basic/tests/functional/TestGuy.php

@ -832,7 +832,7 @@ class TestGuy extends \Codeception\AbstractGuy
* *
* ``` php * ``` php
* <?php * <?php
* $I->submitForm('#login', array('login' => 'davert', 'password' => '123456')); * $I->submitForm('#login', ['login' => 'davert', 'password' => '123456']);
* *
* ``` * ```
* *
@ -851,7 +851,7 @@ class TestGuy extends \Codeception\AbstractGuy
* *
* ``` php * ``` php
* <?php * <?php
* $I->submitForm('#userForm', array('user' => array('login' => 'Davert', 'password' => '123456', 'agree' => true))); * $I->submitForm('#userForm', ['user' => ['login' => 'Davert', 'password' => '123456', 'agree' => true]]);
* *
* ``` * ```
* Note, that pricing plan will be set to Paid, as it's selected on page. * Note, that pricing plan will be set to Paid, as it's selected on page.
@ -1042,8 +1042,8 @@ class TestGuy extends \Codeception\AbstractGuy
* *
* ``` php * ``` php
* <?php * <?php
* $I->sendAjaxPostRequest('/updateSettings', array('notifications' => true); // POST * $I->sendAjaxPostRequest('/updateSettings', ['notifications' => true]; // POST
* $I->sendAjaxGetRequest('/updateSettings', array('notifications' => true); // GET * $I->sendAjaxGetRequest('/updateSettings', ['notifications' => true]; // GET
* *
* ``` * ```
* *

10
apps/basic/views/layouts/main.php

@ -14,8 +14,8 @@ app\config\AppAsset::register($this);
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="<?=Yii::$app->charset; ?>"/> <meta charset="<?= Yii::$app->charset ?>"/>
<title><?=Html::encode($this->title); ?></title> <title><?= Html::encode($this->title) ?></title>
<?php $this->head(); ?> <?php $this->head(); ?>
</head> </head>
<body> <body>
@ -48,13 +48,13 @@ app\config\AppAsset::register($this);
<?=Breadcrumbs::widget([ <?=Breadcrumbs::widget([
'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [], 'links' => isset($this->params['breadcrumbs']) ? $this->params['breadcrumbs'] : [],
]); ?> ]); ?>
<?=$content; ?> <?= $content ?>
</div> </div>
<footer class="footer"> <footer class="footer">
<div class="container"> <div class="container">
<p class="pull-left">&copy; My Company <?=date('Y'); ?></p> <p class="pull-left">&copy; My Company <?= date('Y') ?></p>
<p class="pull-right"><?=Yii::powered(); ?></p> <p class="pull-right"><?= Yii::powered() ?></p>
</div> </div>
</footer> </footer>

4
apps/basic/views/site/about.php

@ -8,11 +8,11 @@ $this->title = 'About';
$this->params['breadcrumbs'][] = $this->title; $this->params['breadcrumbs'][] = $this->title;
?> ?>
<div class="site-about"> <div class="site-about">
<h1><?=Html::encode($this->title); ?></h1> <h1><?= Html::encode($this->title) ?></h1>
<p> <p>
This is the About page. You may modify the following file to customize its content: This is the About page. You may modify the following file to customize its content:
</p> </p>
<code><?=__FILE__; ?></code> <code><?= __FILE__ ?></code>
</div> </div>

12
apps/basic/views/site/contact.php

@ -12,7 +12,7 @@ $this->title = 'Contact';
$this->params['breadcrumbs'][] = $this->title; $this->params['breadcrumbs'][] = $this->title;
?> ?>
<div class="site-contact"> <div class="site-contact">
<h1><?=Html::encode($this->title); ?></h1> <h1><?= Html::encode($this->title) ?></h1>
<?php if (Yii::$app->session->hasFlash('contactFormSubmitted')): ?> <?php if (Yii::$app->session->hasFlash('contactFormSubmitted')): ?>
@ -29,16 +29,16 @@ $this->params['breadcrumbs'][] = $this->title;
<div class="row"> <div class="row">
<div class="col-lg-5"> <div class="col-lg-5">
<?php $form = ActiveForm::begin(['id' => 'contact-form']); ?> <?php $form = ActiveForm::begin(['id' => 'contact-form']); ?>
<?=$form->field($model, 'name'); ?> <?= $form->field($model, 'name') ?>
<?=$form->field($model, 'email'); ?> <?= $form->field($model, 'email') ?>
<?=$form->field($model, 'subject'); ?> <?= $form->field($model, 'subject') ?>
<?=$form->field($model, 'body')->textArea(['rows' => 6]); ?> <?= $form->field($model, 'body')->textArea(['rows' => 6]) ?>
<?=$form->field($model, 'verifyCode')->widget(Captcha::className(), [ <?=$form->field($model, 'verifyCode')->widget(Captcha::className(), [
'options' => ['class' => 'form-control'], 'options' => ['class' => 'form-control'],
'template' => '<div class="row"><div class="col-lg-3">{image}</div><div class="col-lg-6">{input}</div></div>', 'template' => '<div class="row"><div class="col-lg-3">{image}</div><div class="col-lg-6">{input}</div></div>',
]); ?> ]); ?>
<div class="form-group"> <div class="form-group">
<?=Html::submitButton('Submit', ['class' => 'btn btn-primary']); ?> <?= Html::submitButton('Submit', ['class' => 'btn btn-primary']) ?>
</div> </div>
<?php ActiveForm::end(); ?> <?php ActiveForm::end(); ?>
</div> </div>

4
apps/basic/views/site/error.php

@ -13,10 +13,10 @@ $this->title = $name;
?> ?>
<div class="site-error"> <div class="site-error">
<h1><?=Html::encode($this->title); ?></h1> <h1><?= Html::encode($this->title) ?></h1>
<div class="alert alert-danger"> <div class="alert alert-danger">
<?=nl2br(Html::encode($message)); ?> <?= nl2br(Html::encode($message)) ?>
</div> </div>
<p> <p>

8
apps/basic/views/site/login.php

@ -11,7 +11,7 @@ $this->title = 'Login';
$this->params['breadcrumbs'][] = $this->title; $this->params['breadcrumbs'][] = $this->title;
?> ?>
<div class="site-login"> <div class="site-login">
<h1><?=Html::encode($this->title); ?></h1> <h1><?= Html::encode($this->title) ?></h1>
<p>Please fill out the following fields to login:</p> <p>Please fill out the following fields to login:</p>
@ -24,9 +24,9 @@ $this->params['breadcrumbs'][] = $this->title;
], ],
]); ?> ]); ?>
<?=$form->field($model, 'username'); ?> <?= $form->field($model, 'username') ?>
<?=$form->field($model, 'password')->passwordInput(); ?> <?= $form->field($model, 'password')->passwordInput() ?>
<?=$form->field($model, 'rememberMe', [ <?=$form->field($model, 'rememberMe', [
'template' => "<div class=\"col-lg-offset-1 col-lg-3\">{input}</div>\n<div class=\"col-lg-8\">{error}</div>", 'template' => "<div class=\"col-lg-offset-1 col-lg-3\">{input}</div>\n<div class=\"col-lg-8\">{error}</div>",
@ -34,7 +34,7 @@ $this->params['breadcrumbs'][] = $this->title;
<div class="form-group"> <div class="form-group">
<div class="col-lg-offset-1 col-lg-11"> <div class="col-lg-offset-1 col-lg-11">
<?=Html::submitButton('Login', ['class' => 'btn btn-primary']); ?> <?= Html::submitButton('Login', ['class' => 'btn btn-primary']) ?>
</div> </div>
</div> </div>

15
docs/api/db/ActiveRecord.md

@ -175,7 +175,7 @@ class Customer extends \yii\db\ActiveRecord
{ {
public function getOrders() public function getOrders()
{ {
return $this->hasMany('Order', ['customer_id' => 'id']); return $this->hasMany(Order::className(), ['customer_id' => 'id']);
} }
} }
@ -183,7 +183,7 @@ class Order extends \yii\db\ActiveRecord
{ {
public function getCustomer() public function getCustomer()
{ {
return $this->hasOne('Customer', ['id' => 'customer_id']); return $this->hasOne(Customer::className(), ['id' => 'customer_id']);
} }
} }
~~~ ~~~
@ -194,8 +194,7 @@ a one-many relationship. For example, a customer has many orders. And the [[hasO
method declares a many-one or one-one relationship. For example, an order has one customer. method declares a many-one or one-one relationship. For example, an order has one customer.
Both methods take two parameters: Both methods take two parameters:
- `$class`: the name of the class related models should use. If specified without - `$class`: the name of the class that the related models should use.
a namespace, the namespace will be taken from the declaring class.
- `$link`: the association between columns from two tables. This should be given as an array. - `$link`: the association between columns from two tables. This should be given as an array.
The keys of the array are the names of the columns from the table associated with `$class`, The keys of the array are the names of the columns from the table associated with `$class`,
while the values of the array are the names of the columns from the declaring class. while the values of the array are the names of the columns from the declaring class.
@ -223,7 +222,7 @@ class Customer extends \yii\db\ActiveRecord
{ {
public function getBigOrders($threshold = 100) public function getBigOrders($threshold = 100)
{ {
return $this->hasMany('Order', ['customer_id' => 'id']) return $this->hasMany(Order::className(), ['customer_id' => 'id'])
->where('subtotal > :threshold', [':threshold' => $threshold]) ->where('subtotal > :threshold', [':threshold' => $threshold])
->orderBy('id'); ->orderBy('id');
} }
@ -244,7 +243,7 @@ class Order extends \yii\db\ActiveRecord
{ {
public function getItems() public function getItems()
{ {
return $this->hasMany('Item', ['id' => 'item_id']) return $this->hasMany(Item::className(), ['id' => 'item_id'])
->viaTable('tbl_order_item', ['order_id' => 'id']); ->viaTable('tbl_order_item', ['order_id' => 'id']);
} }
} }
@ -259,12 +258,12 @@ class Order extends \yii\db\ActiveRecord
{ {
public function getOrderItems() public function getOrderItems()
{ {
return $this->hasMany('OrderItem', ['order_id' => 'id']); return $this->hasMany(OrderItem::className(), ['order_id' => 'id']);
} }
public function getItems() public function getItems()
{ {
return $this->hasMany('Item', ['id' => 'item_id']) return $this->hasMany(Item::className(), ['id' => 'item_id'])
->via('orderItems'); ->via('orderItems');
} }
} }

20
docs/guide/active-record.md

@ -202,7 +202,7 @@ class Customer extends \yii\db\ActiveRecord
{ {
public function getOrders() public function getOrders()
{ {
return $this->hasMany('Order', ['customer_id' => 'id']); return $this->hasMany(Order::className(), ['customer_id' => 'id']);
} }
} }
@ -210,7 +210,7 @@ class Order extends \yii\db\ActiveRecord
{ {
public function getCustomer() public function getCustomer()
{ {
return $this->hasOne('Customer', ['id' => 'customer_id']); return $this->hasOne(Customer::className(), ['id' => 'customer_id']);
} }
} }
``` ```
@ -257,7 +257,7 @@ class Customer extends \yii\db\ActiveRecord
{ {
public function getBigOrders($threshold = 100) public function getBigOrders($threshold = 100)
{ {
return $this->hasMany('Order', ['customer_id' => 'id']) return $this->hasMany(Order::className(), ['customer_id' => 'id'])
->where('subtotal > :threshold', [':threshold' => $threshold]) ->where('subtotal > :threshold', [':threshold' => $threshold])
->orderBy('id'); ->orderBy('id');
} }
@ -291,7 +291,7 @@ class Order extends \yii\db\ActiveRecord
{ {
public function getItems() public function getItems()
{ {
return $this->hasMany('Item', ['id' => 'item_id']) return $this->hasMany(Item::className(), ['id' => 'item_id'])
->viaTable('tbl_order_item', ['order_id' => 'id']); ->viaTable('tbl_order_item', ['order_id' => 'id']);
} }
} }
@ -306,12 +306,12 @@ class Order extends \yii\db\ActiveRecord
{ {
public function getOrderItems() public function getOrderItems()
{ {
return $this->hasMany('OrderItem', ['order_id' => 'id']); return $this->hasMany(OrderItem::className(), ['order_id' => 'id']);
} }
public function getItems() public function getItems()
{ {
return $this->hasMany('Item', ['id' => 'item_id']) return $this->hasMany(Item::className(), ['id' => 'item_id'])
->via('orderItems'); ->via('orderItems');
} }
} }
@ -517,7 +517,7 @@ class Feature extends \yii\db\ActiveRecord
public function getProduct() public function getProduct()
{ {
return $this->hasOne('Product', ['product_id' => 'id']); return $this->hasOne(Product::className(), ['product_id' => 'id']);
} }
} }
@ -527,7 +527,7 @@ class Product extends \yii\db\ActiveRecord
public function getFeatures() public function getFeatures()
{ {
return $this->hasMany('Feature', ['id' => 'product_id']); return $this->hasMany(Feature::className(), ['id' => 'product_id']);
} }
} }
``` ```
@ -566,7 +566,7 @@ class Feature extends \yii\db\ActiveRecord
public function getProduct() public function getProduct()
{ {
return $this->hasOne('Product', ['product_id' => 'id']); return $this->hasOne(Product::className(), ['product_id' => 'id']);
} }
public function scenarios() public function scenarios()
@ -586,7 +586,7 @@ class Product extends \yii\db\ActiveRecord
public function getFeatures() public function getFeatures()
{ {
return $this->hasMany('Feature', ['id' => 'product_id']); return $this->hasMany(Feature::className(), ['id' => 'product_id']);
} }
public function scenarios() public function scenarios()

2
docs/guide/i18n.md

@ -205,7 +205,7 @@ Will produce "You are 42nd visitor here!".
```php ```php
echo \Yii::t('app', 'You are here for {n, duration} already!', ['n' => 42]); echo \Yii::t('app', 'You are here for {n, duration} already!', ['n' => 47]);
``` ```
Will produce "You are here for 47 sec. already!". Will produce "You are here for 47 sec. already!".

49
docs/guide/installation.md

@ -83,57 +83,28 @@ Yii to catch all requests to nonexistent files, which allows us to have nice-loo
~~~ ~~~
server { server {
set $host_path "/www/mysite";
access_log /www/mysite/log/access.log main;
server_name mysite;
root $host_path/htdocs;
set $yii_bootstrap "index.php";
charset utf-8; charset utf-8;
location / { listen 80;
index index.html $yii_bootstrap; server_name mysite.local;
try_files $uri $uri/ /$yii_bootstrap?$args; root /path/to/project/webroot/directory
}
location ~ ^/(protected|framework|themes/\w+/views) { access_log /path/to/project/log/access.log main;
deny all;
}
#avoid processing of calls to unexisting static files by yii location / {
location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ { try_files $uri $uri/ /index.php?$args; # Redirect everything that isn't real file to index.php including arguments.
try_files $uri =404;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php {
fastcgi_split_path_info ^(.+\.php)(.*)$;
#let yii catch the calls to unexising PHP files
set $fsn /$yii_bootstrap;
if (-f $document_root$fastcgi_script_name){
set $fsn $fastcgi_script_name;
} }
#for php-cgi location ~ \.php$ {
include fastcgi.conf;
fastcgi_pass 127.0.0.1:9000; fastcgi_pass 127.0.0.1:9000;
#for php-fpm
#fastcgi_pass unix:/var/run/php5-fpm.sock; #fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fsn;
#PATH_INFO and PATH_TRANSLATED can be omitted, but RFC 3875 specifies them for CGI
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fsn;
} }
location ~ /\.ht { location ~ /\.(ht|svn|git) {
deny all; deny all;
} }
} }
~~~ ~~~
Using this configuration you can set `cgi.fix_pathinfo=0` in php.ini to avoid Make sure to set `cgi.fix_pathinfo=0` in php.ini to avoid many unnecessary system `stat()` calls.
many unnecessary system `stat()` calls.

6
docs/guide/upgrade-from-v1.md

@ -340,10 +340,10 @@ It is represented as an `ActiveField` object. Using fields, you can build a form
```php ```php
<?php $form = yii\widgets\ActiveForm::begin(); ?> <?php $form = yii\widgets\ActiveForm::begin(); ?>
<?=$form->field($model, 'username'); ?> <?= $form->field($model, 'username') ?>
<?=$form->field($model, 'password')->passwordInput(); ?> <?= $form->field($model, 'password')->passwordInput() ?>
<div class="form-group"> <div class="form-group">
<?=Html::submitButton('Login'); ?> <?= Html::submitButton('Login') ?>
</div> </div>
<?php yii\widgets\ActiveForm::end(); ?> <?php yii\widgets\ActiveForm::end(); ?>
``` ```

113
docs/guide/url.md

@ -1,3 +1,116 @@
URL Management URL Management
============== ==============
The concept of URL management in Yii fairly simple. The idea is that application uses internal routes and parameters
everywhere. Framework takes care of translating routes into URLs and back according to URL manager configuration.
This approach allows you to adjust URLs in a single config file without touching application code.
Internal route
--------------
Internal routes and parameters are what you're dealing with when implementing an application using Yii.
Each controller and its action has a corresponding internal route such as `site/index`. Here `site` is referred to as
controller ID while `index` is referred to as action ID. If controller belongs to a module, internal route is prefixed
with the module ID such as `blog/post/index` for a blog module.
Creating URLs
-------------
As was already mentioned, the most important rule is to always use URL manager to create URLs. Url manages is an
application component with `urlManager` id that is accessible both from web and console applications via
`\Yii::$app->urlManager` and has two following URL creation methods available:
- createUrl($route, $params = [])
- createAbsoluteUrl($route, $params = [])
First one creates URL relative to the application root while the second one creates URL prefixed with protocol and
hostname. The former is suitable for internal application URLs while the latter is used when you need to create rules
for outside the website. For example, when sending emails or generating RSS feed.
Some examples:
```php
echo \Yii::$app->urlManager->createUrl('site/page', ['id' => 'about']);
echo \Yii::$app->urlManager->createAbsoluteUrl('blog/post/index');
```
Inside web application controller you can use its own `createUrl` shortcut method in the following forms:
```php
echo $this->createUrl(''); // currently active route
echo $this->createUrl('view', ['id' => 'contact']); // same controller, different action
echo $this->createUrl('post/index'); // same module, different controller and action
echo $this->createUrl('/site/index'); // absolute route no matter which controller we're in
```
> **Tip**: In order to generate URL with a hashtag, for example `/index.php?r=site/page&id=100#title`, you need to
specify parameter named `#` using `$this->createUrl('post/read', ['id' => 100, '#' => 'title'])`.
Customizing URLs
----------------
By default Yii uses a query string format URLs such as `/index.php?r=news/view&id=100`. In order to make URLs
human-friendly you need to configure `urlManager` component like the following:
```php
<?php
return [
// ...
'components' => [
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
],
],
];
```
Note that
### Named parameters
### Handling subdomains
### Faking URL Suffix
```php
<?php
return [
// ...
'components' => [
'urlManager' => [
'suffix' => '.html',
],
],
];
```
### Handling REST
URL parsing
-----------
Complimentary to creating URLs Yii is handling transforming custom URLs back into internal route and parameters.
### Strict URL parsing
By default if there's no custom rule for URL and URL matches default format such as `/site/page` Yii tries to run a
corresponding controller's action. This behavior could be disabled so if there's no custom rule match, a 404 not found
error will be produced immediately.
```php
<?php
return [
// ...
'components' => [
'urlManager' => [
'enableStrictParsing' => true,
],
],
];
```
Creating your own rule classes
------------------------------

16
docs/guide/view.md

@ -76,7 +76,7 @@ use yii\helpers\Html;
?> ?>
<div class="username"> <div class="username">
<?=Html::encode($user->name); ?> <?= Html::encode($user->name) ?>
</div> </div>
``` ```
@ -97,7 +97,7 @@ use yii\helpers\HtmlPurifier;
?> ?>
<div class="post"> <div class="post">
<?=HtmlPurifier::process($post->text); ?> <?= HtmlPurifier::process($post->text) ?>
</div> </div>
``` ```
@ -256,16 +256,16 @@ use yii\helpers\Html;
?> ?>
<?php $this->beginPage(); ?> <?php $this->beginPage(); ?>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="<?=Yii::$app->charset; ?>"> <html lang="<?= Yii::$app->charset ?>">
<head> <head>
<meta charset="<?=Yii::$app->charset; ?>"/> <meta charset="<?= Yii::$app->charset ?>"/>
<title><?=Html::encode($this->title); ?></title> <title><?= Html::encode($this->title) ?></title>
<?php $this->head(); ?> <?php $this->head(); ?>
</head> </head>
<body> <body>
<?php $this->beginBody(); ?> <?php $this->beginBody(); ?>
<div class="container"> <div class="container">
<?=$content; ?> <?= $content ?>
</div> </div>
<footer class="footer">© 2013 me :)</footer> <footer class="footer">© 2013 me :)</footer>
<?php $this->endBody(); ?> <?php $this->endBody(); ?>
@ -295,8 +295,8 @@ use yii\helpers\Html;
?> ?>
<div class="profile"> <div class="profile">
<h2><?=Html::encode($username); ?></h2> <h2><?= Html::encode($username) ?></h2>
<p><?=Html::encode($tagline); ?></p> <p><?= Html::encode($tagline) ?></p>
</div> </div>
``` ```

8
extensions/composer/yii/composer/Installer.php

@ -31,7 +31,7 @@ class Installer extends LibraryInstaller
*/ */
public function supports($packageType) public function supports($packageType)
{ {
return $packageType === 'yii-extension'; return $packageType === 'yii2-extension';
} }
/** /**
@ -65,7 +65,7 @@ class Installer extends LibraryInstaller
protected function addPackage(PackageInterface $package) protected function addPackage(PackageInterface $package)
{ {
$extension = [ $extension = [
'name' => $package->getPrettyName(), 'name' => $package->getName(),
'version' => $package->getVersion(), 'version' => $package->getVersion(),
]; ];
@ -76,14 +76,14 @@ class Installer extends LibraryInstaller
} }
$extensions = $this->loadExtensions(); $extensions = $this->loadExtensions();
$extensions[$package->getUniqueName()] = $extension; $extensions[$package->getName()] = $extension;
$this->saveExtensions($extensions); $this->saveExtensions($extensions);
} }
protected function removePackage(PackageInterface $package) protected function removePackage(PackageInterface $package)
{ {
$packages = $this->loadExtensions(); $packages = $this->loadExtensions();
unset($packages[$package->getUniqueName()]); unset($packages[$package->getName()]);
$this->saveExtensions($packages); $this->saveExtensions($packages);
} }

2
extensions/composer/yii/composer/InstallerPlugin.php

@ -28,7 +28,7 @@ class InstallerPlugin implements PluginInterface
$composer->getInstallationManager()->addInstaller($installer); $composer->getInstallationManager()->addInstaller($installer);
$file = rtrim($composer->getConfig()->get('vendor-dir'), '/') . '/yii-extensions.php'; $file = rtrim($composer->getConfig()->get('vendor-dir'), '/') . '/yii-extensions.php';
if (!is_file($file)) { if (!is_file($file)) {
file_put_contents($file, "<?php\nreturn array();\n"); file_put_contents($file, "<?php\nreturn [];\n");
} }
} }
} }

2
extensions/jui/composer.json

@ -2,7 +2,7 @@
"name": "yiisoft/yii2-jui", "name": "yiisoft/yii2-jui",
"description": "The Jquery UI extension for the Yii framework", "description": "The Jquery UI extension for the Yii framework",
"keywords": ["yii", "Jquery UI", "renderer"], "keywords": ["yii", "Jquery UI", "renderer"],
"type": "yii-extension", "type": "yii2-extension",
"license": "BSD-3-Clause", "license": "BSD-3-Clause",
"support": { "support": {
"issues": "https://github.com/yiisoft/yii2/issues?state=open", "issues": "https://github.com/yiisoft/yii2/issues?state=open",

2
extensions/mutex/composer.json

@ -2,7 +2,7 @@
"name": "yiisoft/yii2-mutex", "name": "yiisoft/yii2-mutex",
"description": "Mutual exclusion extension for the Yii framework", "description": "Mutual exclusion extension for the Yii framework",
"keywords": ["yii", "mutex"], "keywords": ["yii", "mutex"],
"type": "yii-extension", "type": "yii2-extension",
"license": "BSD-3-Clause", "license": "BSD-3-Clause",
"support": { "support": {
"issues": "https://github.com/yiisoft/yii2/issues?state=open", "issues": "https://github.com/yiisoft/yii2/issues?state=open",

4
extensions/smarty/composer.json

@ -2,7 +2,7 @@
"name": "yiisoft/yii2-smarty", "name": "yiisoft/yii2-smarty",
"description": "The Smarty integration for the Yii framework", "description": "The Smarty integration for the Yii framework",
"keywords": ["yii", "smarty", "renderer"], "keywords": ["yii", "smarty", "renderer"],
"type": "yii-extension", "type": "yii2-extension",
"license": "BSD-3-Clause", "license": "BSD-3-Clause",
"support": { "support": {
"issues": "https://github.com/yiisoft/yii2/issues?state=open", "issues": "https://github.com/yiisoft/yii2/issues?state=open",
@ -13,7 +13,7 @@
}, },
"authors": [ "authors": [
{ {
"name": "Alenxader Makarov", "name": "Alexander Makarov",
"email": "sam@rmcreative.ru" "email": "sam@rmcreative.ru"
} }
], ],

4
extensions/twig/composer.json

@ -2,7 +2,7 @@
"name": "yiisoft/yii2-twig", "name": "yiisoft/yii2-twig",
"description": "The Twig integration for the Yii framework", "description": "The Twig integration for the Yii framework",
"keywords": ["yii", "twig", "renderer"], "keywords": ["yii", "twig", "renderer"],
"type": "yii-extension", "type": "yii2-extension",
"license": "BSD-3-Clause", "license": "BSD-3-Clause",
"support": { "support": {
"issues": "https://github.com/yiisoft/yii2/issues?state=open", "issues": "https://github.com/yiisoft/yii2/issues?state=open",
@ -13,7 +13,7 @@
}, },
"authors": [ "authors": [
{ {
"name": "Alenxader Makarov", "name": "Alexander Makarov",
"email": "sam@rmcreative.ru" "email": "sam@rmcreative.ru"
} }
], ],

3
framework/yii/BaseYii.php

@ -335,8 +335,7 @@ class BaseYii
include($classFile); include($classFile);
if (YII_DEBUG && !class_exists($className, false) && !interface_exists($className, false) && if (YII_DEBUG && !class_exists($className, false) && !interface_exists($className, false) && !trait_exists($className, false)) {
(!function_exists('trait_exists') || !trait_exists($className, false))) {
throw new UnknownClassException("Unable to find '$className' in file: $classFile"); throw new UnknownClassException("Unable to find '$className' in file: $classFile");
} }
} }

70
framework/yii/base/Application.php

@ -54,6 +54,13 @@ abstract class Application extends Module
* @event ActionEvent an event raised after executing a controller action. * @event ActionEvent an event raised after executing a controller action.
*/ */
const EVENT_AFTER_ACTION = 'afterAction'; const EVENT_AFTER_ACTION = 'afterAction';
/**
* @var string the namespace that controller classes are in. If not set,
* it will use the "app\controllers" namespace.
*/
public $controllerNamespace = 'app\\controllers';
/** /**
* @var string the application name. * @var string the application name.
*/ */
@ -121,7 +128,7 @@ abstract class Application extends Module
* ] * ]
* ~~~ * ~~~
*/ */
public $extensions = array(); public $extensions = [];
/** /**
* @var string Used to reserve memory for fatal error handler. * @var string Used to reserve memory for fatal error handler.
@ -137,18 +144,8 @@ abstract class Application extends Module
public function __construct($config = []) public function __construct($config = [])
{ {
Yii::$app = $this; Yii::$app = $this;
if (!isset($config['id'])) {
throw new InvalidConfigException('The "id" configuration is required.');
}
if (isset($config['basePath'])) {
$this->setBasePath($config['basePath']);
unset($config['basePath']);
} else {
throw new InvalidConfigException('The "basePath" configuration is required.');
}
$this->preInit($config); $this->preInit($config);
$this->registerErrorHandlers(); $this->registerErrorHandlers();
$this->registerCoreComponents(); $this->registerCoreComponents();
@ -158,10 +155,23 @@ abstract class Application extends Module
/** /**
* Pre-initializes the application. * Pre-initializes the application.
* This method is called at the beginning of the application constructor. * This method is called at the beginning of the application constructor.
* It initializes several important application properties.
* If you override this method, please make sure you call the parent implementation.
* @param array $config the application configuration * @param array $config the application configuration
* @throws InvalidConfigException if either [[id]] or [[basePath]] configuration is missing.
*/ */
public function preInit(&$config) public function preInit(&$config)
{ {
if (!isset($config['id'])) {
throw new InvalidConfigException('The "id" configuration is required.');
}
if (isset($config['basePath'])) {
$this->setBasePath($config['basePath']);
unset($config['basePath']);
} else {
throw new InvalidConfigException('The "basePath" configuration is required.');
}
if (isset($config['vendorPath'])) { if (isset($config['vendorPath'])) {
$this->setVendorPath($config['vendorPath']); $this->setVendorPath($config['vendorPath']);
unset($config['vendorPath']); unset($config['vendorPath']);
@ -176,6 +186,7 @@ abstract class Application extends Module
// set "@runtime" // set "@runtime"
$this->getRuntimePath(); $this->getRuntimePath();
} }
if (isset($config['timeZone'])) { if (isset($config['timeZone'])) {
$this->setTimeZone($config['timeZone']); $this->setTimeZone($config['timeZone']);
unset($config['timeZone']); unset($config['timeZone']);
@ -185,6 +196,31 @@ abstract class Application extends Module
} }
/** /**
* @inheritdoc
*/
public function init()
{
parent::init();
$this->initExtensions($this->extensions);
}
/**
* Initializes the extensions.
* @param array $extensions the extensions to be initialized. Please refer to [[extensions]]
* for the structure of the extension array.
*/
protected function initExtensions($extensions)
{
foreach ($extensions as $extension) {
if (isset($extension['bootstrap'])) {
/** @var Extension $class */
$class = $extension['bootstrap'];
$class::init();
}
}
}
/**
* Loads components that are declared in [[preload]]. * Loads components that are declared in [[preload]].
* @throws InvalidConfigException if a component or module to be preloaded is unknown * @throws InvalidConfigException if a component or module to be preloaded is unknown
*/ */
@ -221,6 +257,18 @@ abstract class Application extends Module
} }
/** /**
* Sets the root directory of the applicaition and the @app alias.
* This method can only be invoked at the beginning of the constructor.
* @param string $path the root directory of the application.
* @throws InvalidParamException if the directory does not exist.
*/
public function setBasePath($path)
{
parent::setBasePath($path);
Yii::setAlias('@app', $this->getBasePath());
}
/**
* Runs the application. * Runs the application.
* This is the main entrance of an application. * This is the main entrance of an application.
* @return integer the exit status (0 means normal, non-zero values mean abnormal) * @return integer the exit status (0 means normal, non-zero values mean abnormal)

10
framework/yii/base/Extension.php

@ -8,11 +8,21 @@
namespace yii\base; namespace yii\base;
/** /**
* Extension is the base class that may be extended by individual extensions.
*
* Extension serves as the bootstrap class for extensions. When an extension
* is installed via composer, the [[init()]] method of its Extension class (if any)
* will be invoked during the application initialization stage.
*
* @author Qiang Xue <qiang.xue@gmail.com> * @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0 * @since 2.0
*/ */
class Extension class Extension
{ {
/**
* Initializes the extension.
* This method is invoked at the end of [[Application::init()]].
*/
public static function init() public static function init()
{ {
} }

14
framework/yii/base/Module.php

@ -83,7 +83,6 @@ abstract class Module extends Component
* it will use the "controllers" sub-namespace under the namespace of this module. * it will use the "controllers" sub-namespace under the namespace of this module.
* For example, if the namespace of this module is "foo\bar", then the default * For example, if the namespace of this module is "foo\bar", then the default
* controller namespace would be "foo\bar\controllers". * controller namespace would be "foo\bar\controllers".
* If the module is an application, it will default to "app\controllers".
*/ */
public $controllerNamespace; public $controllerNamespace;
/** /**
@ -167,22 +166,20 @@ abstract class Module extends Component
/** /**
* Initializes the module. * Initializes the module.
* This method is called after the module is created and initialized with property values * This method is called after the module is created and initialized with property values
* given in configuration. The default implement will create a path alias using the module [[id]] * given in configuration. The default implementation will create a path alias using the module [[id]]
* and then call [[preloadComponents()]] to load components that are declared in [[preload]]. * and then call [[preloadComponents()]] to load components that are declared in [[preload]].
*
* If you override this method, please make sure you call the parent implementation.
*/ */
public function init() public function init()
{ {
$this->preloadComponents();
if ($this->controllerNamespace === null) { if ($this->controllerNamespace === null) {
if ($this instanceof Application) {
$this->controllerNamespace = 'app\\controllers';
} else {
$class = get_class($this); $class = get_class($this);
if (($pos = strrpos($class, '\\')) !== false) { if (($pos = strrpos($class, '\\')) !== false) {
$this->controllerNamespace = substr($class, 0, $pos) . '\\controllers'; $this->controllerNamespace = substr($class, 0, $pos) . '\\controllers';
} }
} }
} $this->preloadComponents();
} }
/** /**
@ -221,9 +218,6 @@ abstract class Module extends Component
$p = realpath($path); $p = realpath($path);
if ($p !== false && is_dir($p)) { if ($p !== false && is_dir($p)) {
$this->_basePath = $p; $this->_basePath = $p;
if ($this instanceof Application) {
Yii::setAlias('@app', $p);
}
} else { } else {
throw new InvalidParamException("The directory does not exist: $path"); throw new InvalidParamException("The directory does not exist: $path");
} }

4
framework/yii/base/View.php

@ -540,7 +540,7 @@ class View extends Component
/** /**
* Registers all files provided by an asset bundle including depending bundles files. * Registers all files provided by an asset bundle including depending bundles files.
* Removes a bundle from [[assetBundles]] once registered. * Removes a bundle from [[assetBundles]] once files are registered.
* @param string $name name of the bundle to register * @param string $name name of the bundle to register
*/ */
private function registerAssetFiles($name) private function registerAssetFiles($name)
@ -552,7 +552,7 @@ class View extends Component
foreach($bundle->depends as $dep) { foreach($bundle->depends as $dep) {
$this->registerAssetFiles($dep); $this->registerAssetFiles($dep);
} }
$bundle->registerAssets($this); $bundle->registerAssetFiles($this);
unset($this->assetBundles[$name]); unset($this->assetBundles[$name]);
} }

26
framework/yii/db/ActiveRecord.php

@ -456,7 +456,7 @@ class ActiveRecord extends Model
* ~~~ * ~~~
* public function getCountry() * public function getCountry()
* { * {
* return $this->hasOne('Country', ['id' => 'country_id']); * return $this->hasOne(Country::className(), ['id' => 'country_id']);
* } * }
* ~~~ * ~~~
* *
@ -475,7 +475,7 @@ class ActiveRecord extends Model
public function hasOne($class, $link) public function hasOne($class, $link)
{ {
return new ActiveRelation([ return new ActiveRelation([
'modelClass' => $this->getNamespacedClass($class), 'modelClass' => $class,
'primaryModel' => $this, 'primaryModel' => $this,
'link' => $link, 'link' => $link,
'multiple' => false, 'multiple' => false,
@ -496,7 +496,7 @@ class ActiveRecord extends Model
* ~~~ * ~~~
* public function getOrders() * public function getOrders()
* { * {
* return $this->hasMany('Order', ['customer_id' => 'id']); * return $this->hasMany(Order::className(), ['customer_id' => 'id']);
* } * }
* ~~~ * ~~~
* *
@ -513,7 +513,7 @@ class ActiveRecord extends Model
public function hasMany($class, $link) public function hasMany($class, $link)
{ {
return new ActiveRelation([ return new ActiveRelation([
'modelClass' => $this->getNamespacedClass($class), 'modelClass' => $class,
'primaryModel' => $this, 'primaryModel' => $this,
'link' => $link, 'link' => $link,
'multiple' => true, 'multiple' => true,
@ -1439,24 +1439,6 @@ class ActiveRecord extends Model
} }
/** /**
* Changes the given class name into a namespaced one.
* If the given class name is already namespaced, no change will be made.
* Otherwise, the class name will be changed to use the same namespace as
* the current AR class.
* @param string $class the class name to be namespaced
* @return string the namespaced class name
*/
protected static function getNamespacedClass($class)
{
if (strpos($class, '\\') === false) {
$reflector = new \ReflectionClass(static::className());
return $reflector->getNamespaceName() . '\\' . $class;
} else {
return $class;
}
}
/**
* @param array $link * @param array $link
* @param ActiveRecord $foreignModel * @param ActiveRecord $foreignModel
* @param ActiveRecord $primaryModel * @param ActiveRecord $primaryModel

10
framework/yii/debug/views/default/index.php

@ -32,11 +32,11 @@ $this->title = 'Yii Debugger';
<tbody> <tbody>
<?php foreach ($manifest as $tag => $data): ?> <?php foreach ($manifest as $tag => $data): ?>
<tr> <tr>
<td><?=Html::a($tag, ['view', 'tag' => $tag]); ?></td> <td><?= Html::a($tag, ['view', 'tag' => $tag]) ?></td>
<td><?=date('Y-m-d h:i:sa', $data['time']); ?></td> <td><?= date('Y-m-d h:i:sa', $data['time']) ?></td>
<td><?=$data['ip']; ?></td> <td><?= $data['ip'] ?></td>
<td><?=$data['method']; ?></td> <td><?= $data['method'] ?></td>
<td><?=$data['url']; ?></td> <td><?= $data['url'] ?></td>
</tr> </tr>
<?php endforeach; ?> <?php endforeach; ?>
</tbody> </tbody>

10
framework/yii/debug/views/default/toolbar.php

@ -26,13 +26,13 @@ $url = $panels['request']->getUrl();
?> ?>
<div id="yii-debug-toolbar"> <div id="yii-debug-toolbar">
<?php foreach ($panels as $panel): ?> <?php foreach ($panels as $panel): ?>
<?=$panel->getSummary(); ?> <?= $panel->getSummary() ?>
<?php endforeach; ?> <?php endforeach; ?>
<span class="yii-debug-toolbar-toggler" onclick="<?=$minJs; ?>"></span> <span class="yii-debug-toolbar-toggler" onclick="<?= $minJs ?>"></span>
</div> </div>
<div id="yii-debug-toolbar-min"> <div id="yii-debug-toolbar-min">
<a href="<?=$url; ?>" title="Open Yii Debugger" id="yii-debug-toolbar-logo"> <a href="<?= $url ?>" title="Open Yii Debugger" id="yii-debug-toolbar-logo">
<img width="29" height="30" alt="" src="<?=ConfigPanel::getYiiLogo(); ?>"> <img width="29" height="30" alt="" src="<?= ConfigPanel::getYiiLogo() ?>">
</a> </a>
<span class="yii-debug-toolbar-toggler" onclick="<?=$maxJs; ?>"></span> <span class="yii-debug-toolbar-toggler" onclick="<?= $maxJs ?>"></span>
</div> </div>

4
framework/yii/debug/views/default/view.php

@ -21,7 +21,7 @@ $this->title = 'Yii Debugger';
Yii Debugger Yii Debugger
</div> </div>
<?php foreach ($panels as $panel): ?> <?php foreach ($panels as $panel): ?>
<?=$panel->getSummary(); ?> <?= $panel->getSummary() ?>
<?php endforeach; ?> <?php endforeach; ?>
</div> </div>
@ -71,7 +71,7 @@ $this->title = 'Yii Debugger';
echo ' at ' . date('Y-m-d h:i:s a', $summary['time']) . ' by ' . $summary['ip']; echo ' at ' . date('Y-m-d h:i:s a', $summary['time']) . ' by ' . $summary['ip'];
?> ?>
</div> </div>
<?=$activePanel->getDetail(); ?> <?= $activePanel->getDetail() ?>
</div> </div>
</div> </div>
</div> </div>

4
framework/yii/debug/views/layouts/main.php

@ -11,12 +11,12 @@ yii\debug\DebugAsset::register($this);
<html> <html>
<?php $this->beginPage(); ?> <?php $this->beginPage(); ?>
<head> <head>
<title><?=Html::encode($this->title); ?></title> <title><?= Html::encode($this->title) ?></title>
<?php $this->head(); ?> <?php $this->head(); ?>
</head> </head>
<body> <body>
<?php $this->beginBody(); ?> <?php $this->beginBody(); ?>
<?=$content; ?> <?= $content ?>
<?php $this->endBody(); ?> <?php $this->endBody(); ?>
</body> </body>
<?php $this->endPage(); ?> <?php $this->endPage(); ?>

8
framework/yii/gii/generators/controller/templates/controller.php

@ -13,15 +13,15 @@ echo "<?php\n";
?> ?>
<?php if (!empty($generator->ns)): ?> <?php if (!empty($generator->ns)): ?>
namespace <?=$generator->ns; ?>; namespace <?= $generator->ns ?>;
<?php endif; ?> <?php endif; ?>
class <?=$generator->getControllerClass(); ?> extends <?='\\' . trim($generator->baseClass, '\\') . "\n"; ?> class <?= $generator->getControllerClass() ?> extends <?= '\\' . trim($generator->baseClass, '\\') . "\n" ?>
{ {
<?php foreach($generator->getActionIDs() as $action): ?> <?php foreach($generator->getActionIDs() as $action): ?>
public function action<?=Inflector::id2camel($action); ?>() public function action<?= Inflector::id2camel($action) ?>()
{ {
return $this->render('<?=$action; ?>'); return $this->render('<?= $action ?>');
} }
<?php endforeach; ?> <?php endforeach; ?>

6
framework/yii/gii/generators/controller/templates/view.php

@ -12,11 +12,11 @@ echo "<?php\n";
/** /**
* @var yii\base\View $this * @var yii\base\View $this
*/ */
<?="?>"; ?> <?= "?>" ?>
<h1><?=$generator->getControllerID() . '/' . $action; ?></h1> <h1><?= $generator->getControllerID() . '/' . $action ?></h1>
<p> <p>
You may change the content of this page by modifying You may change the content of this page by modifying
the file <code><?='<?php'; ?> echo __FILE__; ?></code>. the file <code><?= '<?php' ?> echo __FILE__; ?></code>.
</p> </p>

12
framework/yii/gii/generators/crud/Generator.php

@ -190,9 +190,9 @@ class Generator extends \yii\gii\Generator
} }
$column = $tableSchema->columns[$attribute]; $column = $tableSchema->columns[$attribute];
if ($column->phpType === 'boolean') { if ($column->phpType === 'boolean') {
return "\$form->field(\$model, '$attribute')->checkbox();"; return "\$form->field(\$model, '$attribute')->checkbox()";
} elseif ($column->type === 'text') { } elseif ($column->type === 'text') {
return "\$form->field(\$model, '$attribute')->textarea(['rows' => 6]);"; return "\$form->field(\$model, '$attribute')->textarea(['rows' => 6])";
} else { } else {
if (preg_match('/^(password|pass|passwd|passcode)$/i', $column->name)) { if (preg_match('/^(password|pass|passwd|passcode)$/i', $column->name)) {
$input = 'passwordInput'; $input = 'passwordInput';
@ -200,9 +200,9 @@ class Generator extends \yii\gii\Generator
$input = 'textInput'; $input = 'textInput';
} }
if ($column->phpType !== 'string' || $column->size === null) { if ($column->phpType !== 'string' || $column->size === null) {
return "\$form->field(\$model, '$attribute')->$input();"; return "\$form->field(\$model, '$attribute')->$input()";
} else { } else {
return "\$form->field(\$model, '$attribute')->$input(['maxlength' => $column->size]);"; return "\$form->field(\$model, '$attribute')->$input(['maxlength' => $column->size])";
} }
} }
} }
@ -216,9 +216,9 @@ class Generator extends \yii\gii\Generator
$tableSchema = $this->getTableSchema(); $tableSchema = $this->getTableSchema();
$column = $tableSchema->columns[$attribute]; $column = $tableSchema->columns[$attribute];
if ($column->phpType === 'boolean') { if ($column->phpType === 'boolean') {
return "\$form->field(\$model, '$attribute')->checkbox();"; return "\$form->field(\$model, '$attribute')->checkbox()";
} else { } else {
return "\$form->field(\$model, '$attribute');"; return "\$form->field(\$model, '$attribute')";
} }
} }

58
framework/yii/gii/generators/crud/templates/controller.php

@ -21,19 +21,19 @@ $actionParamComments = $generator->generateActionParamComments();
echo "<?php\n"; echo "<?php\n";
?> ?>
namespace <?=StringHelper::dirname(ltrim($generator->controllerClass, '\\')); ?>; namespace <?= StringHelper::dirname(ltrim($generator->controllerClass, '\\')) ?>;
use <?=ltrim($generator->modelClass, '\\'); ?>; use <?= ltrim($generator->modelClass, '\\') ?>;
use <?=ltrim($generator->searchModelClass, '\\'); ?>; use <?= ltrim($generator->searchModelClass, '\\') ?>;
use yii\data\ActiveDataProvider; use yii\data\ActiveDataProvider;
use <?=ltrim($generator->baseControllerClass, '\\'); ?>; use <?= ltrim($generator->baseControllerClass, '\\') ?>;
use yii\web\HttpException; use yii\web\HttpException;
use yii\web\VerbFilter; use yii\web\VerbFilter;
/** /**
* <?=$controllerClass; ?> implements the CRUD actions for <?=$modelClass; ?> model. * <?= $controllerClass ?> implements the CRUD actions for <?= $modelClass ?> model.
*/ */
class <?=$controllerClass; ?> extends <?=StringHelper::basename($generator->baseControllerClass) . "\n"; ?> class <?= $controllerClass ?> extends <?= StringHelper::basename($generator->baseControllerClass) . "\n" ?>
{ {
public function behaviors() public function behaviors()
{ {
@ -48,12 +48,12 @@ class <?=$controllerClass; ?> extends <?=StringHelper::basename($generator->base
} }
/** /**
* Lists all <?=$modelClass; ?> models. * Lists all <?= $modelClass ?> models.
* @return mixed * @return mixed
*/ */
public function actionIndex() public function actionIndex()
{ {
$searchModel = new <?=$searchModelClass; ?>; $searchModel = new <?= $searchModelClass ?>;
$dataProvider = $searchModel->search($_GET); $dataProvider = $searchModel->search($_GET);
return $this->render('index', [ return $this->render('index', [
@ -63,28 +63,28 @@ class <?=$controllerClass; ?> extends <?=StringHelper::basename($generator->base
} }
/** /**
* Displays a single <?=$modelClass; ?> model. * Displays a single <?= $modelClass ?> model.
* <?=implode("\n\t * ", $actionParamComments) . "\n"; ?> * <?= implode("\n\t * ", $actionParamComments) . "\n" ?>
* @return mixed * @return mixed
*/ */
public function actionView(<?=$actionParams; ?>) public function actionView(<?= $actionParams ?>)
{ {
return $this->render('view', [ return $this->render('view', [
'model' => $this->findModel(<?=$actionParams; ?>), 'model' => $this->findModel(<?= $actionParams ?>),
]); ]);
} }
/** /**
* Creates a new <?=$modelClass; ?> model. * Creates a new <?= $modelClass ?> model.
* If creation is successful, the browser will be redirected to the 'view' page. * If creation is successful, the browser will be redirected to the 'view' page.
* @return mixed * @return mixed
*/ */
public function actionCreate() public function actionCreate()
{ {
$model = new <?=$modelClass; ?>; $model = new <?= $modelClass ?>;
if ($model->load($_POST) && $model->save()) { if ($model->load($_POST) && $model->save()) {
return $this->redirect(['view', <?=$urlParams; ?>]); return $this->redirect(['view', <?= $urlParams ?>]);
} else { } else {
return $this->render('create', [ return $this->render('create', [
'model' => $model, 'model' => $model,
@ -93,17 +93,17 @@ class <?=$controllerClass; ?> extends <?=StringHelper::basename($generator->base
} }
/** /**
* Updates an existing <?=$modelClass; ?> model. * Updates an existing <?= $modelClass ?> model.
* If update is successful, the browser will be redirected to the 'view' page. * If update is successful, the browser will be redirected to the 'view' page.
* <?=implode("\n\t * ", $actionParamComments) . "\n"; ?> * <?= implode("\n\t * ", $actionParamComments) . "\n" ?>
* @return mixed * @return mixed
*/ */
public function actionUpdate(<?=$actionParams; ?>) public function actionUpdate(<?= $actionParams ?>)
{ {
$model = $this->findModel(<?=$actionParams; ?>); $model = $this->findModel(<?= $actionParams ?>);
if ($model->load($_POST) && $model->save()) { if ($model->load($_POST) && $model->save()) {
return $this->redirect(['view', <?=$urlParams; ?>]); return $this->redirect(['view', <?= $urlParams ?>]);
} else { } else {
return $this->render('update', [ return $this->render('update', [
'model' => $model, 'model' => $model,
@ -112,25 +112,25 @@ class <?=$controllerClass; ?> extends <?=StringHelper::basename($generator->base
} }
/** /**
* Deletes an existing <?=$modelClass; ?> model. * Deletes an existing <?= $modelClass ?> model.
* If deletion is successful, the browser will be redirected to the 'index' page. * If deletion is successful, the browser will be redirected to the 'index' page.
* <?=implode("\n\t * ", $actionParamComments) . "\n"; ?> * <?= implode("\n\t * ", $actionParamComments) . "\n" ?>
* @return mixed * @return mixed
*/ */
public function actionDelete(<?=$actionParams; ?>) public function actionDelete(<?= $actionParams ?>)
{ {
$this->findModel(<?=$actionParams; ?>)->delete(); $this->findModel(<?= $actionParams ?>)->delete();
return $this->redirect(['index']); return $this->redirect(['index']);
} }
/** /**
* Finds the <?=$modelClass; ?> model based on its primary key value. * Finds the <?= $modelClass ?> model based on its primary key value.
* If the model is not found, a 404 HTTP exception will be thrown. * If the model is not found, a 404 HTTP exception will be thrown.
* <?=implode("\n\t * ", $actionParamComments) . "\n"; ?> * <?= implode("\n\t * ", $actionParamComments) . "\n" ?>
* @return <?=$modelClass; ?> the loaded model * @return <?= $modelClass ?> the loaded model
* @throws HttpException if the model cannot be found * @throws HttpException if the model cannot be found
*/ */
protected function findModel(<?=$actionParams; ?>) protected function findModel(<?= $actionParams ?>)
{ {
<?php <?php
if (count($pks) === 1) { if (count($pks) === 1) {
@ -143,7 +143,7 @@ if (count($pks) === 1) {
$condition = '[' . implode(', ', $condition) . ']'; $condition = '[' . implode(', ', $condition) . ']';
} }
?> ?>
if (($model = <?=$modelClass; ?>::find(<?=$condition; ?>)) !== null) { if (($model = <?= $modelClass ?>::find(<?= $condition ?>)) !== null) {
return $model; return $model;
} else { } else {
throw new HttpException(404, 'The requested page does not exist.'); throw new HttpException(404, 'The requested page does not exist.');

18
framework/yii/gii/generators/crud/templates/search.php

@ -19,23 +19,23 @@ $searchConditions = $generator->generateSearchConditions();
echo "<?php\n"; echo "<?php\n";
?> ?>
namespace <?=StringHelper::dirname(ltrim($generator->searchModelClass, '\\')); ?>; namespace <?= StringHelper::dirname(ltrim($generator->searchModelClass, '\\')) ?>;
use yii\base\Model; use yii\base\Model;
use yii\data\ActiveDataProvider; use yii\data\ActiveDataProvider;
use <?=ltrim($generator->modelClass, '\\'); ?>; use <?= ltrim($generator->modelClass, '\\') ?>;
/** /**
* <?=$searchModelClass; ?> represents the model behind the search form about <?=$modelClass; ?>. * <?= $searchModelClass ?> represents the model behind the search form about <?= $modelClass ?>.
*/ */
class <?=$searchModelClass; ?> extends Model class <?= $searchModelClass ?> extends Model
{ {
public $<?=implode(";\n\tpublic $", $searchAttributes); ?>; public $<?= implode(";\n\tpublic $", $searchAttributes) ?>;
public function rules() public function rules()
{ {
return [ return [
<?=implode(",\n\t\t\t", $rules); ?>, <?= implode(",\n\t\t\t", $rules) ?>,
]; ];
} }
@ -46,14 +46,14 @@ class <?=$searchModelClass; ?> extends Model
{ {
return [ return [
<?php foreach ($labels as $name => $label): ?> <?php foreach ($labels as $name => $label): ?>
<?="'$name' => '" . addslashes($label) . "',\n"; ?> <?= "'$name' => '" . addslashes($label) . "',\n" ?>
<?php endforeach; ?> <?php endforeach; ?>
]; ];
} }
public function search($params) public function search($params)
{ {
$query = <?=$modelClass; ?>::find(); $query = <?= $modelClass ?>::find();
$dataProvider = new ActiveDataProvider([ $dataProvider = new ActiveDataProvider([
'query' => $query, 'query' => $query,
]); ]);
@ -62,7 +62,7 @@ class <?=$searchModelClass; ?> extends Model
return $dataProvider; return $dataProvider;
} }
<?=implode("\n\t\t", $searchConditions); ?> <?= implode("\n\t\t", $searchConditions) ?>
return $dataProvider; return $dataProvider;
} }

12
framework/yii/gii/generators/crud/templates/views/_form.php

@ -23,22 +23,22 @@ use yii\widgets\ActiveForm;
/** /**
* @var yii\base\View $this * @var yii\base\View $this
* @var <?=ltrim($generator->modelClass, '\\'); ?> $model * @var <?= ltrim($generator->modelClass, '\\') ?> $model
* @var yii\widgets\ActiveForm $form * @var yii\widgets\ActiveForm $form
*/ */
?> ?>
<div class="<?=Inflector::camel2id(StringHelper::basename($generator->modelClass)); ?>-form"> <div class="<?= Inflector::camel2id(StringHelper::basename($generator->modelClass)) ?>-form">
<?='<?php'; ?> $form = ActiveForm::begin(); ?> <?= "<?php " ?>$form = ActiveForm::begin(); ?>
<?php foreach ($safeAttributes as $attribute) { <?php foreach ($safeAttributes as $attribute) {
echo "\t\t<?=" . $generator->generateActiveField($attribute) . " ?>\n\n"; echo "\t\t<?= " . $generator->generateActiveField($attribute) . " ?>\n\n";
} ?> } ?>
<div class="form-group"> <div class="form-group">
<?='<?php'; ?> echo Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']); ?> <?= "<?= " ?>Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div> </div>
<?='<?php'; ?> ActiveForm::end(); ?> <?= "<?php " ?>ActiveForm::end(); ?>
</div> </div>

16
framework/yii/gii/generators/crud/templates/views/_search.php

@ -16,14 +16,14 @@ use yii\widgets\ActiveForm;
/** /**
* @var yii\base\View $this * @var yii\base\View $this
* @var <?=ltrim($generator->searchModelClass, '\\'); ?> $model * @var <?= ltrim($generator->searchModelClass, '\\') ?> $model
* @var yii\widgets\ActiveForm $form * @var yii\widgets\ActiveForm $form
*/ */
?> ?>
<div class="<?=Inflector::camel2id(StringHelper::basename($generator->modelClass)); ?>-search"> <div class="<?= Inflector::camel2id(StringHelper::basename($generator->modelClass)) ?>-search">
<?='<?php'; ?> $form = ActiveForm::begin([ <?= "<?php " ?>$form = ActiveForm::begin([
'action' => ['index'], 'action' => ['index'],
'method' => 'get', 'method' => 'get',
]); ?> ]); ?>
@ -32,17 +32,17 @@ use yii\widgets\ActiveForm;
$count = 0; $count = 0;
foreach ($generator->getTableSchema()->getColumnNames() as $attribute) { foreach ($generator->getTableSchema()->getColumnNames() as $attribute) {
if (++$count < 6) { if (++$count < 6) {
echo "\t\t<?=" . $generator->generateActiveSearchField($attribute) . " ?>\n"; echo "\t\t<?= " . $generator->generateActiveSearchField($attribute) . " ?>\n\n";
} else { } else {
echo "\t\t<?php // echo " . $generator->generateActiveSearchField($attribute) . " ?>\n"; echo "\t\t<?= // " . $generator->generateActiveSearchField($attribute) . " ?>\n\n";
} }
} }
?> ?>
<div class="form-group"> <div class="form-group">
<?='<?php'; ?> echo Html::submitButton('Search', ['class' => 'btn btn-primary']); ?> <?= "<?= " ?>Html::submitButton('Search', ['class' => 'btn btn-primary']) ?>
<?='<?php'; ?> echo Html::resetButton('Reset', ['class' => 'btn btn-default']); ?> <?= "<?= " ?>Html::resetButton('Reset', ['class' => 'btn btn-default']) ?>
</div> </div>
<?='<?php'; ?> ActiveForm::end(); ?> <?= "<?php " ?>ActiveForm::end(); ?>
</div> </div>

12
framework/yii/gii/generators/crud/templates/views/create.php

@ -15,18 +15,18 @@ use yii\helpers\Html;
/** /**
* @var yii\base\View $this * @var yii\base\View $this
* @var <?=ltrim($generator->modelClass, '\\'); ?> $model * @var <?= ltrim($generator->modelClass, '\\') ?> $model
*/ */
$this->title = 'Create <?=Inflector::camel2words(StringHelper::basename($generator->modelClass)); ?>'; $this->title = 'Create <?= Inflector::camel2words(StringHelper::basename($generator->modelClass)) ?>';
$this->params['breadcrumbs'][] = ['label' => '<?=Inflector::pluralize(Inflector::camel2words(StringHelper::basename($generator->modelClass))); ?>', 'url' => ['index']]; $this->params['breadcrumbs'][] = ['label' => '<?= Inflector::pluralize(Inflector::camel2words(StringHelper::basename($generator->modelClass))) ?>', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title; $this->params['breadcrumbs'][] = $this->title;
?> ?>
<div class="<?=Inflector::camel2id(StringHelper::basename($generator->modelClass)); ?>-create"> <div class="<?= Inflector::camel2id(StringHelper::basename($generator->modelClass)) ?>-create">
<h1><?="<?php"; ?> echo Html::encode($this->title); ?></h1> <h1><?= "<?= " ?>Html::encode($this->title) ?></h1>
<?="<?php"; ?> echo $this->render('_form', [ <?= "<?php " ?>echo $this->render('_form', [
'model' => $model, 'model' => $model,
]); ?> ]); ?>

24
framework/yii/gii/generators/crud/templates/views/index.php

@ -15,29 +15,29 @@ echo "<?php\n";
?> ?>
use yii\helpers\Html; use yii\helpers\Html;
use <?=$generator->indexWidgetType === 'grid' ? 'yii\grid\GridView' : 'yii\widgets\ListView'; ?>; use <?= $generator->indexWidgetType === 'grid' ? "yii\grid\GridView" : "yii\widgets\ListView" ?>;
/** /**
* @var yii\base\View $this * @var yii\base\View $this
* @var yii\data\ActiveDataProvider $dataProvider * @var yii\data\ActiveDataProvider $dataProvider
* @var <?=ltrim($generator->searchModelClass, '\\'); ?> $searchModel * @var <?= ltrim($generator->searchModelClass, '\\') ?> $searchModel
*/ */
$this->title = '<?=Inflector::pluralize(Inflector::camel2words(StringHelper::basename($generator->modelClass))); ?>'; $this->title = '<?= Inflector::pluralize(Inflector::camel2words(StringHelper::basename($generator->modelClass))) ?>';
$this->params['breadcrumbs'][] = $this->title; $this->params['breadcrumbs'][] = $this->title;
?> ?>
<div class="<?=Inflector::camel2id(StringHelper::basename($generator->modelClass)); ?>-index"> <div class="<?= Inflector::camel2id(StringHelper::basename($generator->modelClass)) ?>-index">
<h1><?="<?php"; ?> echo Html::encode($this->title); ?></h1> <h1><?= "<?= " ?>Html::encode($this->title) ?></h1>
<?='<?php' . ($generator->indexWidgetType === 'grid' ? ' //' : ''); ?> echo $this->render('_search', ['model' => $searchModel]); ?> <?= "<?php " . ($generator->indexWidgetType === 'grid' ? "// " : "") ?>echo $this->render('_search', ['model' => $searchModel]); ?>
<p> <p>
<?='<?php'; ?> echo Html::a('Create <?=StringHelper::basename($generator->modelClass); ?>', ['create'], ['class' => 'btn btn-success']); ?> <?= "<?= " ?>Html::a('Create <?= StringHelper::basename($generator->modelClass) ?>', ['create'], ['class' => 'btn btn-success']) ?>
</p> </p>
<?php if ($generator->indexWidgetType === 'grid'): ?> <?php if ($generator->indexWidgetType === 'grid'): ?>
<?="<?php"; ?> echo GridView::widget([ <?= "<?php " ?>echo GridView::widget([
'dataProvider' => $dataProvider, 'dataProvider' => $dataProvider,
'filterModel' => $searchModel, 'filterModel' => $searchModel,
'columns' => [ 'columns' => [
@ -48,9 +48,9 @@ $count = 0;
foreach ($generator->getTableSchema()->columns as $column) { foreach ($generator->getTableSchema()->columns as $column) {
$format = $generator->generateColumnFormat($column); $format = $generator->generateColumnFormat($column);
if (++$count < 6) { if (++$count < 6) {
echo "\t\t\t'" . $column->name . ($format === 'text' ? '' : ':' . $format) . "',\n"; echo "\t\t\t'" . $column->name . ($format === 'text' ? "" : ":" . $format) . "',\n";
} else { } else {
echo "\t\t\t// '" . $column->name . ($format === 'text' ? '' : ':' . $format) . "',\n"; echo "\t\t\t// '" . $column->name . ($format === 'text' ? "" : ":" . $format) . "',\n";
} }
} }
?> ?>
@ -59,11 +59,11 @@ foreach ($generator->getTableSchema()->columns as $column) {
], ],
]); ?> ]); ?>
<?php else: ?> <?php else: ?>
<?="<?php"; ?> echo ListView::widget([ <?= "<?php " ?>echo ListView::widget([
'dataProvider' => $dataProvider, 'dataProvider' => $dataProvider,
'itemOptions' => ['class' => 'item'], 'itemOptions' => ['class' => 'item'],
'itemView' => function ($model, $key, $index, $widget) { 'itemView' => function ($model, $key, $index, $widget) {
return Html::a(Html::encode($model-><?=$nameAttribute; ?>), ['view', <?=$urlParams; ?>]); return Html::a(Html::encode($model-><?= $nameAttribute ?>), ['view', <?= $urlParams ?>]);
}, },
]); ?> ]); ?>
<?php endif; ?> <?php endif; ?>

14
framework/yii/gii/generators/crud/templates/views/update.php

@ -17,19 +17,19 @@ use yii\helpers\Html;
/** /**
* @var yii\base\View $this * @var yii\base\View $this
* @var <?=ltrim($generator->modelClass, '\\'); ?> $model * @var <?= ltrim($generator->modelClass, '\\') ?> $model
*/ */
$this->title = 'Update <?=Inflector::camel2words(StringHelper::basename($generator->modelClass)); ?>: ' . $model-><?=$generator->getNameAttribute(); ?>; $this->title = 'Update <?= Inflector::camel2words(StringHelper::basename($generator->modelClass)) ?>: ' . $model-><?= $generator->getNameAttribute() ?>;
$this->params['breadcrumbs'][] = ['label' => '<?=Inflector::pluralize(Inflector::camel2words(StringHelper::basename($generator->modelClass))); ?>', 'url' => ['index']]; $this->params['breadcrumbs'][] = ['label' => '<?= Inflector::pluralize(Inflector::camel2words(StringHelper::basename($generator->modelClass))) ?>', 'url' => ['index']];
$this->params['breadcrumbs'][] = ['label' => $model-><?=$generator->getNameAttribute(); ?>, 'url' => ['view', <?=$urlParams; ?>]]; $this->params['breadcrumbs'][] = ['label' => $model-><?= $generator->getNameAttribute() ?>, 'url' => ['view', <?= $urlParams ?>]];
$this->params['breadcrumbs'][] = 'Update'; $this->params['breadcrumbs'][] = 'Update';
?> ?>
<div class="<?=Inflector::camel2id(StringHelper::basename($generator->modelClass)); ?>-update"> <div class="<?= Inflector::camel2id(StringHelper::basename($generator->modelClass)) ?>-update">
<h1><?="<?php"; ?> echo Html::encode($this->title); ?></h1> <h1><?= "<?= " ?>Html::encode($this->title) ?></h1>
<?="<?php"; ?> echo $this->render('_form', [ <?= "<?php " ?>echo $this->render('_form', [
'model' => $model, 'model' => $model,
]); ?> ]); ?>

18
framework/yii/gii/generators/crud/templates/views/view.php

@ -18,33 +18,33 @@ use yii\widgets\DetailView;
/** /**
* @var yii\base\View $this * @var yii\base\View $this
* @var <?=ltrim($generator->modelClass, '\\'); ?> $model * @var <?= ltrim($generator->modelClass, '\\') ?> $model
*/ */
$this->title = $model-><?=$generator->getNameAttribute(); ?>; $this->title = $model-><?= $generator->getNameAttribute() ?>;
$this->params['breadcrumbs'][] = ['label' => '<?=Inflector::pluralize(Inflector::camel2words(StringHelper::basename($generator->modelClass))); ?>', 'url' => ['index']]; $this->params['breadcrumbs'][] = ['label' => '<?= Inflector::pluralize(Inflector::camel2words(StringHelper::basename($generator->modelClass))) ?>', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title; $this->params['breadcrumbs'][] = $this->title;
?> ?>
<div class="<?=Inflector::camel2id(StringHelper::basename($generator->modelClass)); ?>-view"> <div class="<?= Inflector::camel2id(StringHelper::basename($generator->modelClass)) ?>-view">
<h1><?="<?php"; ?> echo Html::encode($this->title); ?></h1> <h1><?= "<?= " ?>Html::encode($this->title) ?></h1>
<p> <p>
<?='<?php'; ?> echo Html::a('Update', ['update', <?=$urlParams; ?>], ['class' => 'btn btn-primary']); ?> <?= "<?= " ?>Html::a('Update', ['update', <?= $urlParams ?>], ['class' => 'btn btn-primary']) ?>
<?='<?php'; ?> echo Html::a('Delete', ['delete', <?=$urlParams; ?>], [ <?= "<?php " ?>echo Html::a('Delete', ['delete', <?= $urlParams ?>], [
'class' => 'btn btn-danger', 'class' => 'btn btn-danger',
'data-confirm' => Yii::t('app', 'Are you sure to delete this item?'), 'data-confirm' => Yii::t('app', 'Are you sure to delete this item?'),
'data-method' => 'post', 'data-method' => 'post',
]); ?> ]); ?>
</p> </p>
<?='<?php'; ?> echo DetailView::widget([ <?= "<?php " ?>echo DetailView::widget([
'model' => $model, 'model' => $model,
'attributes' => [ 'attributes' => [
<?php <?php
foreach ($generator->getTableSchema()->columns as $column) { foreach ($generator->getTableSchema()->columns as $column) {
$format = $generator->generateColumnFormat($column); $format = $generator->generateColumnFormat($column);
echo "\t\t\t'" . $column->name . ($format === 'text' ? '' : ':' . $format) . "',\n"; echo "\t\t\t'" . $column->name . ($format === 'text' ? "" : ":" . $format) . "',\n";
} }
?> ?>
], ],

6
framework/yii/gii/generators/form/templates/action.php

@ -12,9 +12,9 @@ use yii\helpers\Inflector;
echo "<?php\n"; echo "<?php\n";
?> ?>
public function action<?=Inflector::id2camel(trim(basename($generator->viewName), '_')); ?>() public function action<?= Inflector::id2camel(trim(basename($generator->viewName), '_')) ?>()
{ {
$model = new <?=$generator->modelClass; ?><?=empty($generator->scenarioName) ? '' : "(['scenario' => '{$generator->scenarioName}'])"; ?>; $model = new <?= $generator->modelClass ?><?= empty($generator->scenarioName) ? '' : "(['scenario' => '{$generator->scenarioName}'])" ?>;
if ($model->load($_POST)) { if ($model->load($_POST)) {
if($model->validate()) { if($model->validate()) {
@ -22,7 +22,7 @@ public function action<?=Inflector::id2camel(trim(basename($generator->viewName)
return; return;
} }
} }
return $this->render('<?=$generator->viewName; ?>', [ return $this->render('<?= $generator->viewName ?>', [
'model' => $model, 'model' => $model,
]); ]);
} }

16
framework/yii/gii/generators/form/templates/form.php

@ -14,22 +14,22 @@ use yii\widgets\ActiveForm;
/** /**
* @var yii\base\View $this * @var yii\base\View $this
* @var <?=$generator->modelClass; ?> $model * @var <?= $generator->modelClass ?> $model
* @var ActiveForm $form * @var ActiveForm $form
*/ */
<?="?>"; ?> <?= "?>" ?>
<div class="<?=str_replace('/', '-', trim($generator->viewName, '_')); ?>"> <div class="<?= str_replace('/', '-', trim($generator->viewName, '_')) ?>">
<?='<?php'; ?> $form = ActiveForm::begin(); ?> <?= '<?php' ?> $form = ActiveForm::begin(); ?>
<?php foreach ($generator->getModelAttributes() as $attribute): ?> <?php foreach ($generator->getModelAttributes() as $attribute): ?>
<?='<?php'; ?> echo $form->field($model, '<?=$attribute; ?>'); ?> <?= '<?php' ?> echo $form->field($model, '<?= $attribute ?>'); ?>
<?php endforeach; ?> <?php endforeach; ?>
<div class="form-group"> <div class="form-group">
<?='<?php'; ?> echo Html::submitButton('Submit', ['class' => 'btn btn-primary']); ?> <?= '<?php' ?> echo Html::submitButton('Submit', ['class' => 'btn btn-primary']); ?>
</div> </div>
<?='<?php'; ?> ActiveForm::end(); ?> <?= '<?php' ?> ActiveForm::end(); ?>
</div><!-- <?=str_replace('/', '-', trim($generator->viewName, '-')); ?> --> </div><!-- <?= str_replace('/', '-', trim($generator->viewName, '-')) ?> -->

20
framework/yii/gii/generators/model/templates/model.php

@ -15,29 +15,29 @@
echo "<?php\n"; echo "<?php\n";
?> ?>
namespace <?=$generator->ns; ?>; namespace <?= $generator->ns ?>;
/** /**
* This is the model class for table "<?=$tableName; ?>". * This is the model class for table "<?= $tableName ?>".
* *
<?php foreach ($tableSchema->columns as $column): ?> <?php foreach ($tableSchema->columns as $column): ?>
* @property <?="{$column->phpType} \${$column->name}\n"; ?> * @property <?= "{$column->phpType} \${$column->name}\n" ?>
<?php endforeach; ?> <?php endforeach; ?>
<?php if (!empty($relations)): ?> <?php if (!empty($relations)): ?>
* *
<?php foreach ($relations as $name => $relation): ?> <?php foreach ($relations as $name => $relation): ?>
* @property <?=$relation[1] . ($relation[2] ? '[]' : '') . ' $' . lcfirst($name) . "\n"; ?> * @property <?= $relation[1] . ($relation[2] ? '[]' : '') . ' $' . lcfirst($name) . "\n" ?>
<?php endforeach; ?> <?php endforeach; ?>
<?php endif; ?> <?php endif; ?>
*/ */
class <?=$className; ?> extends <?='\\' . ltrim($generator->baseClass, '\\') . "\n"; ?> class <?= $className ?> extends <?= '\\' . ltrim($generator->baseClass, '\\') . "\n" ?>
{ {
/** /**
* @inheritdoc * @inheritdoc
*/ */
public static function tableName() public static function tableName()
{ {
return '<?=$tableName; ?>'; return '<?= $tableName ?>';
} }
/** /**
@ -45,7 +45,7 @@ class <?=$className; ?> extends <?='\\' . ltrim($generator->baseClass, '\\') . "
*/ */
public function rules() public function rules()
{ {
return [<?="\n\t\t\t" . implode(",\n\t\t\t", $rules) . "\n\t\t"; ?>]; return [<?= "\n\t\t\t" . implode(",\n\t\t\t", $rules) . "\n\t\t" ?>];
} }
/** /**
@ -55,7 +55,7 @@ class <?=$className; ?> extends <?='\\' . ltrim($generator->baseClass, '\\') . "
{ {
return [ return [
<?php foreach ($labels as $name => $label): ?> <?php foreach ($labels as $name => $label): ?>
<?="'$name' => '" . addslashes($label) . "',\n"; ?> <?= "'$name' => '" . addslashes($label) . "',\n" ?>
<?php endforeach; ?> <?php endforeach; ?>
]; ];
} }
@ -64,9 +64,9 @@ class <?=$className; ?> extends <?='\\' . ltrim($generator->baseClass, '\\') . "
/** /**
* @return \yii\db\ActiveRelation * @return \yii\db\ActiveRelation
*/ */
public function get<?=$name; ?>() public function get<?= $name ?>()
{ {
<?=$relation[0] . "\n"; ?> <?= $relation[0] . "\n" ?>
} }
<?php endforeach; ?> <?php endforeach; ?>
} }

2
framework/yii/gii/generators/module/templates/controller.php

@ -8,7 +8,7 @@
echo "<?php\n"; echo "<?php\n";
?> ?>
namespace <?=$generator->getControllerNamespace(); ?>; namespace <?= $generator->getControllerNamespace() ?>;
use yii\web\Controller; use yii\web\Controller;

6
framework/yii/gii/generators/module/templates/module.php

@ -13,12 +13,12 @@ $className = substr($className, $pos + 1);
echo "<?php\n"; echo "<?php\n";
?> ?>
namespace <?=$ns; ?>; namespace <?= $ns ?>;
class <?=$className; ?> extends \yii\base\Module class <?= $className ?> extends \yii\base\Module
{ {
public $controllerNamespace = '<?=$generator->getControllerNamespace(); ?>'; public $controllerNamespace = '<?= $generator->getControllerNamespace() ?>';
public function init() public function init()
{ {

12
framework/yii/gii/generators/module/templates/view.php

@ -4,15 +4,15 @@
* @var yii\gii\generators\module\Generator $generator * @var yii\gii\generators\module\Generator $generator
*/ */
?> ?>
<div class="<?=$generator->moduleID . '-default-index'; ?>"> <div class="<?= $generator->moduleID . '-default-index' ?>">
<h1><?="<?php"; ?> echo $this->context->action->uniqueId; ?></h1> <h1><?= "<?php" ?> echo $this->context->action->uniqueId; ?></h1>
<p> <p>
This is the view content for action "<?="<?php"; ?> echo $this->context->action->id; ?>". This is the view content for action "<?= "<?php" ?> echo $this->context->action->id; ?>".
The action belongs to the controller "<?="<?php"; ?> echo get_class($this->context); ?>" The action belongs to the controller "<?= "<?php" ?> echo get_class($this->context); ?>"
in the "<?="<?php"; ?> echo $this->context->module->id; ?>" module. in the "<?= "<?php" ?> echo $this->context->module->id; ?>" module.
</p> </p>
<p> <p>
You may customize this page by editing the following file:<br> You may customize this page by editing the following file:<br>
<code><?="<?php"; ?> echo __FILE__; ?></code> <code><?= "<?php" ?> echo __FILE__; ?></code>
</p> </p>
</div> </div>

2
framework/yii/gii/views/default/diff.php

@ -10,6 +10,6 @@
<?php elseif (empty($diff)): ?> <?php elseif (empty($diff)): ?>
<div class="alert alert-success">Identical.</div> <div class="alert alert-success">Identical.</div>
<?php else: ?> <?php else: ?>
<div class="content"><?=$diff; ?></div> <div class="content"><?= $diff ?></div>
<?php endif; ?> <?php endif; ?>
</div> </div>

6
framework/yii/gii/views/default/index.php

@ -21,9 +21,9 @@ $this->title = 'Welcome to Gii';
<div class="row"> <div class="row">
<?php foreach ($generators as $id => $generator): ?> <?php foreach ($generators as $id => $generator): ?>
<div class="generator col-lg-4"> <div class="generator col-lg-4">
<h3><?=Html::encode($generator->getName()); ?></h3> <h3><?= Html::encode($generator->getName()) ?></h3>
<p><?=$generator->getDescription(); ?></p> <p><?= $generator->getDescription() ?></p>
<p><?=Html::a('Start »', ['default/view', 'id' => $id], ['class' => 'btn btn-default']); ?></p> <p><?= Html::a('Start »', ['default/view', 'id' => $id], ['class' => 'btn btn-default']) ?></p>
</div> </div>
<?php endforeach; ?> <?php endforeach; ?>
</div> </div>

8
framework/yii/gii/views/default/view.php

@ -24,9 +24,9 @@ foreach ($generator->templates as $name => $path) {
} }
?> ?>
<div class="default-view"> <div class="default-view">
<h1><?=Html::encode($this->title); ?></h1> <h1><?= Html::encode($this->title) ?></h1>
<p><?=$generator->getDescription(); ?></p> <p><?= $generator->getDescription() ?></p>
<?php $form = ActiveForm::begin([ <?php $form = ActiveForm::begin([
'id' => "$id-generator", 'id' => "$id-generator",
@ -45,10 +45,10 @@ foreach ($generator->templates as $name => $path) {
Please select which set of the templates should be used to generated the code. Please select which set of the templates should be used to generated the code.
'); ?> '); ?>
<div class="form-group"> <div class="form-group">
<?=Html::submitButton('Preview', ['name' => 'preview', 'class' => 'btn btn-primary']); ?> <?= Html::submitButton('Preview', ['name' => 'preview', 'class' => 'btn btn-primary']) ?>
<?php if(isset($files)): ?> <?php if(isset($files)): ?>
<?=Html::submitButton('Generate', ['name' => 'generate', 'class' => 'btn btn-success']); ?> <?= Html::submitButton('Generate', ['name' => 'generate', 'class' => 'btn btn-success']) ?>
<?php endif; ?> <?php endif; ?>
</div> </div>
</div> </div>

6
framework/yii/gii/views/default/view/files.php

@ -33,11 +33,11 @@ use yii\gii\CodeFile;
</thead> </thead>
<tbody> <tbody>
<?php foreach ($files as $file): ?> <?php foreach ($files as $file): ?>
<tr class="<?=$file->operation; ?>"> <tr class="<?= $file->operation ?>">
<td class="file"> <td class="file">
<?=Html::a(Html::encode($file->getRelativePath()), ['preview', 'file' => $file->id], ['class' => 'preview-code', 'data-title' => $file->getRelativePath()]); ?> <?= Html::a(Html::encode($file->getRelativePath()), ['preview', 'file' => $file->id], ['class' => 'preview-code', 'data-title' => $file->getRelativePath()]) ?>
<?php if ($file->operation === CodeFile::OP_OVERWRITE): ?> <?php if ($file->operation === CodeFile::OP_OVERWRITE): ?>
<?=Html::a('diff', ['diff', 'file' => $file->id], ['class' => 'diff-code label label-warning', 'data-title' => $file->getRelativePath()]); ?> <?= Html::a('diff', ['diff', 'file' => $file->id], ['class' => 'diff-code label label-warning', 'data-title' => $file->getRelativePath()]) ?>
<?php endif; ?> <?php endif; ?>
</td> </td>
<td class="action"> <td class="action">

2
framework/yii/gii/views/default/view/results.php

@ -18,5 +18,5 @@ use yii\gii\CodeFile;
echo '<div class="alert alert-success">' . $generator->successMessage() . '</div>'; echo '<div class="alert alert-success">' . $generator->successMessage() . '</div>';
} }
?> ?>
<pre><?=nl2br($results); ?></pre> <pre><?= nl2br($results) ?></pre>
</div> </div>

2
framework/yii/gii/views/layouts/generator.php

@ -25,7 +25,7 @@ $activeGenerator = Yii::$app->controller->generator;
</div> </div>
</div> </div>
<div class="col-lg-9"> <div class="col-lg-9">
<?=$content; ?> <?= $content ?>
</div> </div>
</div> </div>
<?php $this->endContent(); ?> <?php $this->endContent(); ?>

6
framework/yii/gii/views/layouts/main.php

@ -14,7 +14,7 @@ $asset = yii\gii\GiiAsset::register($this);
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8"/> <meta charset="utf-8"/>
<title><?=Html::encode($this->title); ?></title> <title><?= Html::encode($this->title) ?></title>
<?php $this->head(); ?> <?php $this->head(); ?>
</head> </head>
<body> <body>
@ -37,13 +37,13 @@ NavBar::end();
?> ?>
<div class="container"> <div class="container">
<?=$content; ?> <?= $content ?>
</div> </div>
<footer class="footer"> <footer class="footer">
<div class="container"> <div class="container">
<p class="pull-left">A Product of <a href="http://www.yiisoft.com/">Yii Software LLC</a></p> <p class="pull-left">A Product of <a href="http://www.yiisoft.com/">Yii Software LLC</a></p>
<p class="pull-right"><?=Yii::powered(); ?></p> <p class="pull-right"><?= Yii::powered() ?></p>
</div> </div>
</footer> </footer>

12
framework/yii/requirements/views/web/index.php

@ -52,18 +52,18 @@
<table class="table table-bordered"> <table class="table table-bordered">
<tr><th>Name</th><th>Result</th><th>Required By</th><th>Memo</th></tr> <tr><th>Name</th><th>Result</th><th>Required By</th><th>Memo</th></tr>
<?php foreach($requirements as $requirement): ?> <?php foreach($requirements as $requirement): ?>
<tr class="<?=$requirement['condition'] ? 'success' : ($requirement['mandatory'] ? 'error' : 'warning'); ?>"> <tr class="<?= $requirement['condition'] ? 'success' : ($requirement['mandatory'] ? 'error' : 'warning') ?>">
<td> <td>
<?=$requirement['name']; ?> <?= $requirement['name'] ?>
</td> </td>
<td> <td>
<span class="result"><?=$requirement['condition'] ? 'Passed' : ($requirement['mandatory'] ? 'Failed' : 'Warning'); ?></span> <span class="result"><?= $requirement['condition'] ? 'Passed' : ($requirement['mandatory'] ? 'Failed' : 'Warning') ?></span>
</td> </td>
<td> <td>
<?=$requirement['by']; ?> <?= $requirement['by'] ?>
</td> </td>
<td> <td>
<?=$requirement['memo']; ?> <?= $requirement['memo'] ?>
</td> </td>
</tr> </tr>
<?php endforeach; ?> <?php endforeach; ?>
@ -74,7 +74,7 @@
<hr> <hr>
<div class="footer"> <div class="footer">
<p>Server: <?=$this->getServerInfo() . ' ' . $this->getNowDate(); ?></p> <p>Server: <?= $this->getServerInfo() . ' ' . $this->getNowDate() ?></p>
<p>Powered by <a href="http://www.yiiframework.com/" rel="external">Yii Framework</a></p> <p>Powered by <a href="http://www.yiiframework.com/" rel="external">Yii Framework</a></p>
</div> </div>
</div> </div>

8
framework/yii/views/errorHandler/callStackItem.php

@ -12,15 +12,15 @@
*/ */
?> ?>
<li class="<?php if (!$handler->isCoreFile($file) || $index === 1) echo 'application'; ?> call-stack-item" <li class="<?php if (!$handler->isCoreFile($file) || $index === 1) echo 'application'; ?> call-stack-item"
data-line="<?=(int)($line - $begin); ?>"> data-line="<?= (int)($line - $begin) ?>">
<div class="element-wrap"> <div class="element-wrap">
<div class="element"> <div class="element">
<span class="item-number"><?=(int)$index; ?>.</span> <span class="item-number"><?= (int)$index ?>.</span>
<span class="text"><?php if ($file !== null) echo 'in ' . $handler->htmlEncode($file); ?></span> <span class="text"><?php if ($file !== null) echo 'in ' . $handler->htmlEncode($file); ?></span>
<?php if ($method !== null): ?> <?php if ($method !== null): ?>
<span class="call"> <span class="call">
<?php if ($file !== null) echo '&ndash;' ?> <?php if ($file !== null) echo '&ndash;' ?>
<?php if ($class !== null) echo $handler->addTypeLinks($class) . '::'; ?><?=$handler->addTypeLinks($method . '()'); ?> <?php if ($class !== null) echo $handler->addTypeLinks($class) . '::'; ?><?= $handler->addTypeLinks($method . '()') ?>
</span> </span>
<?php endif; ?> <?php endif; ?>
<span class="at"><?php if ($line !== null) echo 'at line'; ?></span> <span class="at"><?php if ($line !== null) echo 'at line'; ?></span>
@ -32,7 +32,7 @@
<div class="error-line"></div> <div class="error-line"></div>
<?php for ($i = $begin; $i <= $end; ++$i): ?><div class="hover-line"></div><?php endfor; ?> <?php for ($i = $begin; $i <= $end; ++$i): ?><div class="hover-line"></div><?php endfor; ?>
<div class="code"> <div class="code">
<?php for ($i = $begin; $i <= $end; ++$i): ?><span class="lines-item"><?=(int)($i + 1); ?></span><?php endfor; ?> <?php for ($i = $begin; $i <= $end; ++$i): ?><span class="lines-item"><?= (int)($i + 1) ?></span><?php endfor; ?>
<pre><?php <pre><?php
// fill empty lines with a whitespace to avoid rendering problems in opera // fill empty lines with a whitespace to avoid rendering problems in opera
for ($i = $begin; $i <= $end; ++$i) { for ($i = $begin; $i <= $end; ++$i) {

8
framework/yii/views/errorHandler/error.php

@ -28,7 +28,7 @@ if ($exception instanceof \yii\base\UserException) {
<html> <html>
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<title><?=$handler->htmlEncode($name); ?></title> <title><?= $handler->htmlEncode($name) ?></title>
<style> <style>
body { body {
@ -69,8 +69,8 @@ if ($exception instanceof \yii\base\UserException) {
</head> </head>
<body> <body>
<h1><?=$handler->htmlEncode($name); ?></h1> <h1><?= $handler->htmlEncode($name) ?></h1>
<h2><?=nl2br($handler->htmlEncode($message)); ?></h2> <h2><?= nl2br($handler->htmlEncode($message)) ?></h2>
<p> <p>
The above error occurred while the Web server was processing your request. The above error occurred while the Web server was processing your request.
</p> </p>
@ -78,7 +78,7 @@ if ($exception instanceof \yii\base\UserException) {
Please contact us if you think this is a server error. Thank you. Please contact us if you think this is a server error. Thank you.
</p> </p>
<div class="version"> <div class="version">
<?=date('Y-m-d H:i:s', time()); ?> <?= date('Y-m-d H:i:s', time()) ?>
</div> </div>
<?php if (method_exists($this, 'endBody')) $this->endBody(); // to allow injecting code into body (mostly by Yii Debug Toolbar) ?> <?php if (method_exists($this, 'endBody')) $this->endBody(); // to allow injecting code into body (mostly by Yii Debug Toolbar) ?>
</body> </body>

18
framework/yii/views/errorHandler/exception.php

File diff suppressed because one or more lines are too long

12
framework/yii/views/errorHandler/previousException.php

@ -9,13 +9,13 @@
<h2> <h2>
<span>Caused by:</span> <span>Caused by:</span>
<?php if ($exception instanceof \yii\base\Exception): ?> <?php if ($exception instanceof \yii\base\Exception): ?>
<span><?=$handler->htmlEncode($exception->getName()); ?></span> &ndash; <span><?= $handler->htmlEncode($exception->getName()) ?></span> &ndash;
<?=$handler->addTypeLinks(get_class($exception)); ?> <?= $handler->addTypeLinks(get_class($exception)) ?>
<?php else: ?> <?php else: ?>
<span><?=$handler->htmlEncode(get_class($exception)); ?></span> <span><?= $handler->htmlEncode(get_class($exception)) ?></span>
<?php endif; ?> <?php endif; ?>
</h2> </h2>
<h3><?=$handler->htmlEncode($exception->getMessage()); ?></h3> <h3><?= $handler->htmlEncode($exception->getMessage()) ?></h3>
<p>in <span class="file"><?=$exception->getFile(); ?></span> at line <span class="line"><?=$exception->getLine(); ?></span></p> <p>in <span class="file"><?= $exception->getFile() ?></span> at line <span class="line"><?= $exception->getLine() ?></span></p>
<?=$handler->renderPreviousExceptions($exception); ?> <?= $handler->renderPreviousExceptions($exception) ?>
</div> </div>

4
framework/yii/views/migration.php

@ -8,7 +8,7 @@
echo "<?php\n"; echo "<?php\n";
?> ?>
class <?=$className; ?> extends \yii\db\Migration class <?= $className ?> extends \yii\db\Migration
{ {
public function up() public function up()
{ {
@ -17,7 +17,7 @@ class <?=$className; ?> extends \yii\db\Migration
public function down() public function down()
{ {
echo "<?=$className; ?> cannot be reverted.\n"; echo "<?= $className ?> cannot be reverted.\n";
return false; return false;
} }
} }

15
framework/yii/web/AssetBundle.php

@ -15,8 +15,9 @@ use yii\base\View;
/** /**
* AssetBundle represents a collection of asset files, such as CSS, JS, images. * AssetBundle represents a collection of asset files, such as CSS, JS, images.
* *
* Each asset bundle has a unique name that globally identifies it among all asset bundles * Each asset bundle has a unique name that globally identifies it among all asset bundles used in an application.
* used in an application. * The name is the [fully qualified class name](http://php.net/manual/en/language.namespaces.rules.php)
* of the class representing it.
* *
* An asset bundle can depend on other asset bundles. When registering an asset bundle * An asset bundle can depend on other asset bundles. When registering an asset bundle
* with a view, all its dependent asset bundles will be automatically registered. * with a view, all its dependent asset bundles will be automatically registered.
@ -130,13 +131,9 @@ class AssetBundle extends Object
/** /**
* Registers the CSS and JS files with the given view. * Registers the CSS and JS files with the given view.
* It will then try to convert non-CSS or JS files (e.g. LESS, Sass) into the corresponding * @param \yii\base\View $view the view that the asset files are to be registered with.
* CSS or JS files using [[AssetManager::converter|asset converter]].
* @param \yii\base\View $view the view that the asset files to be registered with.
* @throws InvalidConfigException if [[baseUrl]] or [[basePath]] is not set when the bundle
* contains internal CSS or JS files.
*/ */
public function registerAssets($view) public function registerAssetFiles($view)
{ {
foreach ($this->js as $js) { foreach ($this->js as $js) {
if (strpos($js, '/') !== 0 && strpos($js, '://') === false) { if (strpos($js, '/') !== 0 && strpos($js, '://') === false) {
@ -156,6 +153,8 @@ class AssetBundle extends Object
/** /**
* Publishes the asset bundle if its source code is not under Web-accessible directory. * Publishes the asset bundle if its source code is not under Web-accessible directory.
* It will also try to convert non-CSS or JS files (e.g. LESS, Sass) into the corresponding
* CSS or JS files using [[AssetManager::converter|asset converter]].
* @param AssetManager $am the asset manager to perform the asset publishing * @param AssetManager $am the asset manager to perform the asset publishing
* @throws InvalidConfigException if [[baseUrl]] or [[basePath]] is not set when the bundle * @throws InvalidConfigException if [[baseUrl]] or [[basePath]] is not set when the bundle
* contains internal CSS or JS files. * contains internal CSS or JS files.

6
framework/yii/web/AssetManager.php

@ -95,10 +95,12 @@ class AssetManager extends Component
* it will treat `$name` as the class of the asset bundle and create a new instance of it. * it will treat `$name` as the class of the asset bundle and create a new instance of it.
* *
* @param string $name the class name of the asset bundle * @param string $name the class name of the asset bundle
* @param boolean $publish whether to publish the asset files in the asset bundle before it is returned.
* If you set this false, you must manually call `AssetBundle::publish()` to publish the asset files.
* @return AssetBundle the asset bundle instance * @return AssetBundle the asset bundle instance
* @throws InvalidConfigException if $name does not refer to a valid asset bundle * @throws InvalidConfigException if $name does not refer to a valid asset bundle
*/ */
public function getBundle($name) public function getBundle($name, $publish = true)
{ {
if (isset($this->bundles[$name])) { if (isset($this->bundles[$name])) {
if ($this->bundles[$name] instanceof AssetBundle) { if ($this->bundles[$name] instanceof AssetBundle) {
@ -111,8 +113,10 @@ class AssetManager extends Component
} else { } else {
$bundle = Yii::createObject($name); $bundle = Yii::createObject($name);
} }
if ($publish) {
/** @var AssetBundle $bundle */ /** @var AssetBundle $bundle */
$bundle->publish($this); $bundle->publish($this);
}
return $this->bundles[$name] = $bundle; return $this->bundles[$name] = $bundle;
} }

1
framework/yii/web/User.php

@ -10,7 +10,6 @@ namespace yii\web;
use Yii; use Yii;
use yii\base\Component; use yii\base\Component;
use yii\base\InvalidConfigException; use yii\base\InvalidConfigException;
use yii\base\InvalidParamException;
/** /**
* User is the class for the "user" application component that manages the user authentication status. * User is the class for the "user" application component that manages the user authentication status.

2
tests/unit/data/ar/Customer.php

@ -24,7 +24,7 @@ class Customer extends ActiveRecord
public function getOrders() public function getOrders()
{ {
return $this->hasMany('Order', ['customer_id' => 'id'])->orderBy('id'); return $this->hasMany(Order::className(), ['customer_id' => 'id'])->orderBy('id');
} }
public static function active($query) public static function active($query)

8
tests/unit/data/ar/Order.php

@ -19,17 +19,17 @@ class Order extends ActiveRecord
public function getCustomer() public function getCustomer()
{ {
return $this->hasOne('Customer', ['id' => 'customer_id']); return $this->hasOne(Customer::className(), ['id' => 'customer_id']);
} }
public function getOrderItems() public function getOrderItems()
{ {
return $this->hasMany('OrderItem', ['order_id' => 'id']); return $this->hasMany(OrderItem::className(), ['order_id' => 'id']);
} }
public function getItems() public function getItems()
{ {
return $this->hasMany('Item', ['id' => 'item_id']) return $this->hasMany(Item::className(), ['id' => 'item_id'])
->via('orderItems', function ($q) { ->via('orderItems', function ($q) {
// additional query configuration // additional query configuration
})->orderBy('id'); })->orderBy('id');
@ -37,7 +37,7 @@ class Order extends ActiveRecord
public function getBooks() public function getBooks()
{ {
return $this->hasMany('Item', ['id' => 'item_id']) return $this->hasMany(Item::className(), ['id' => 'item_id'])
->viaTable('tbl_order_item', ['order_id' => 'id']) ->viaTable('tbl_order_item', ['order_id' => 'id'])
->where(['category_id' => 1]); ->where(['category_id' => 1]);
} }

4
tests/unit/data/ar/OrderItem.php

@ -19,11 +19,11 @@ class OrderItem extends ActiveRecord
public function getOrder() public function getOrder()
{ {
return $this->hasOne('Order', ['id' => 'order_id']); return $this->hasOne(Order::className(), ['id' => 'order_id']);
} }
public function getItem() public function getItem()
{ {
return $this->hasOne('Item', ['id' => 'item_id']); return $this->hasOne(Item::className(), ['id' => 'item_id']);
} }
} }

2
tests/unit/data/views/layout.php

@ -14,7 +14,7 @@
<body> <body>
<?php $this->beginBody(); ?> <?php $this->beginBody(); ?>
<?=$content; ?> <?= $content ?>
<?php $this->endBody(); ?> <?php $this->endBody(); ?>
</body> </body>

Loading…
Cancel
Save