Browse Source

Refactored View

tags/2.0.0-beta
Alexander Makarov 11 years ago
parent
commit
927e9dddb4
  1. 2
      apps/advanced/backend/views/layouts/main.php
  2. 2
      apps/advanced/backend/views/site/error.php
  3. 2
      apps/advanced/backend/views/site/index.php
  4. 2
      apps/advanced/backend/views/site/login.php
  5. 2
      apps/advanced/frontend/views/emails/passwordResetToken.php
  6. 2
      apps/advanced/frontend/views/layouts/main.php
  7. 2
      apps/advanced/frontend/views/site/about.php
  8. 2
      apps/advanced/frontend/views/site/contact.php
  9. 2
      apps/advanced/frontend/views/site/error.php
  10. 2
      apps/advanced/frontend/views/site/index.php
  11. 2
      apps/advanced/frontend/views/site/login.php
  12. 2
      apps/advanced/frontend/views/site/requestPasswordResetToken.php
  13. 2
      apps/advanced/frontend/views/site/resetPassword.php
  14. 2
      apps/advanced/frontend/views/site/signup.php
  15. 2
      apps/basic/views/layouts/main.php
  16. 2
      apps/basic/views/site/about.php
  17. 2
      apps/basic/views/site/contact.php
  18. 2
      apps/basic/views/site/error.php
  19. 2
      apps/basic/views/site/index.php
  20. 2
      apps/basic/views/site/login.php
  21. 2
      docs/guide/template.md
  22. 4
      docs/guide/view.md
  23. 2
      extensions/debug/Module.php
  24. 2
      extensions/debug/views/default/index.php
  25. 2
      extensions/debug/views/default/toolbar.php
  26. 2
      extensions/debug/views/default/view.php
  27. 2
      extensions/debug/views/layouts/main.php
  28. 2
      extensions/gii/Generator.php
  29. 2
      extensions/gii/generators/controller/form.php
  30. 2
      extensions/gii/generators/controller/templates/controller.php
  31. 4
      extensions/gii/generators/controller/templates/view.php
  32. 2
      extensions/gii/generators/crud/form.php
  33. 2
      extensions/gii/generators/crud/templates/controller.php
  34. 2
      extensions/gii/generators/crud/templates/search.php
  35. 4
      extensions/gii/generators/crud/templates/views/_form.php
  36. 4
      extensions/gii/generators/crud/templates/views/_search.php
  37. 4
      extensions/gii/generators/crud/templates/views/create.php
  38. 4
      extensions/gii/generators/crud/templates/views/index.php
  39. 4
      extensions/gii/generators/crud/templates/views/update.php
  40. 4
      extensions/gii/generators/crud/templates/views/view.php
  41. 2
      extensions/gii/generators/form/form.php
  42. 2
      extensions/gii/generators/form/templates/action.php
  43. 4
      extensions/gii/generators/form/templates/form.php
  44. 2
      extensions/gii/generators/model/form.php
  45. 2
      extensions/gii/generators/model/templates/model.php
  46. 2
      extensions/gii/generators/module/form.php
  47. 2
      extensions/gii/generators/module/templates/controller.php
  48. 2
      extensions/gii/generators/module/templates/module.php
  49. 2
      extensions/gii/generators/module/templates/view.php
  50. 2
      extensions/gii/views/default/diff.php
  51. 2
      extensions/gii/views/default/index.php
  52. 2
      extensions/gii/views/default/view.php
  53. 2
      extensions/gii/views/default/view/files.php
  54. 2
      extensions/gii/views/default/view/results.php
  55. 2
      extensions/gii/views/layouts/generator.php
  56. 2
      extensions/gii/views/layouts/main.php
  57. 2
      framework/yii/base/Application.php
  58. 405
      framework/yii/base/View.php
  59. 2
      framework/yii/captcha/CaptchaValidator.php
  60. 1
      framework/yii/classes.php
  61. 2
      framework/yii/validators/BooleanValidator.php
  62. 2
      framework/yii/validators/CompareValidator.php
  63. 2
      framework/yii/validators/EmailValidator.php
  64. 2
      framework/yii/validators/InlineValidator.php
  65. 2
      framework/yii/validators/NumberValidator.php
  66. 2
      framework/yii/validators/RangeValidator.php
  67. 2
      framework/yii/validators/RegularExpressionValidator.php
  68. 2
      framework/yii/validators/RequiredValidator.php
  69. 2
      framework/yii/validators/StringValidator.php
  70. 2
      framework/yii/validators/UrlValidator.php
  71. 2
      framework/yii/validators/Validator.php
  72. 8
      framework/yii/web/AssetBundle.php
  73. 430
      framework/yii/web/View.php
  74. 2
      tests/unit/data/views/layout.php
  75. 2
      tests/unit/data/views/rawlayout.php
  76. 2
      tests/unit/framework/web/AssetBundleTest.php

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

@ -6,7 +6,7 @@ use yii\bootstrap\NavBar;
use yii\widgets\Breadcrumbs; use yii\widgets\Breadcrumbs;
/** /**
* @var $this \yii\base\View * @var $this \yii\web\View
* @var $content string * @var $content string
*/ */
AppAsset::register($this); AppAsset::register($this);

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

@ -3,7 +3,7 @@
use yii\helpers\Html; use yii\helpers\Html;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var string $name * @var string $name
* @var string $message * @var string $message
* @var Exception $exception * @var Exception $exception

2
apps/advanced/backend/views/site/index.php

@ -1,6 +1,6 @@
<?php <?php
/** /**
* @var yii\base\View $this * @var yii\web\View $this
*/ */
$this->title = 'My Yii Application'; $this->title = 'My Yii Application';
?> ?>

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

@ -3,7 +3,7 @@ use yii\helpers\Html;
use yii\widgets\ActiveForm; use yii\widgets\ActiveForm;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\widgets\ActiveForm $form * @var yii\widgets\ActiveForm $form
* @var app\models\LoginForm $model * @var app\models\LoginForm $model
*/ */

2
apps/advanced/frontend/views/emails/passwordResetToken.php

@ -2,7 +2,7 @@
use yii\helpers\Html; use yii\helpers\Html;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var common\models\User $user; * @var common\models\User $user;
*/ */

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

@ -7,7 +7,7 @@ use yii\widgets\Breadcrumbs;
use frontend\widgets\Alert; use frontend\widgets\Alert;
/** /**
* @var $this \yii\base\View * @var $this \yii\web\View
* @var $content string * @var $content string
*/ */
AppAsset::register($this); AppAsset::register($this);

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

@ -2,7 +2,7 @@
use yii\helpers\Html; use yii\helpers\Html;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
*/ */
$this->title = 'About'; $this->title = 'About';
$this->params['breadcrumbs'][] = $this->title; $this->params['breadcrumbs'][] = $this->title;

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

@ -4,7 +4,7 @@ use yii\widgets\ActiveForm;
use yii\captcha\Captcha; use yii\captcha\Captcha;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\widgets\ActiveForm $form * @var yii\widgets\ActiveForm $form
* @var app\models\ContactForm $model * @var app\models\ContactForm $model
*/ */

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

@ -3,7 +3,7 @@
use yii\helpers\Html; use yii\helpers\Html;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var string $name * @var string $name
* @var string $message * @var string $message
* @var Exception $exception * @var Exception $exception

2
apps/advanced/frontend/views/site/index.php

@ -1,6 +1,6 @@
<?php <?php
/** /**
* @var yii\base\View $this * @var yii\web\View $this
*/ */
$this->title = 'My Yii Application'; $this->title = 'My Yii Application';
?> ?>

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

@ -3,7 +3,7 @@ use yii\helpers\Html;
use yii\widgets\ActiveForm; use yii\widgets\ActiveForm;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\widgets\ActiveForm $form * @var yii\widgets\ActiveForm $form
* @var app\models\LoginForm $model * @var app\models\LoginForm $model
*/ */

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

@ -3,7 +3,7 @@ use yii\helpers\Html;
use yii\widgets\ActiveForm; use yii\widgets\ActiveForm;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\widgets\ActiveForm $form * @var yii\widgets\ActiveForm $form
* @var common\models\User $model * @var common\models\User $model
*/ */

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

@ -3,7 +3,7 @@ use yii\helpers\Html;
use yii\widgets\ActiveForm; use yii\widgets\ActiveForm;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\widgets\ActiveForm $form * @var yii\widgets\ActiveForm $form
* @var common\models\User $model * @var common\models\User $model
*/ */

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

@ -3,7 +3,7 @@ use yii\helpers\Html;
use yii\widgets\ActiveForm; use yii\widgets\ActiveForm;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\widgets\ActiveForm $form * @var yii\widgets\ActiveForm $form
* @var common\models\User $model * @var common\models\User $model
*/ */

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

@ -5,7 +5,7 @@ use yii\bootstrap\NavBar;
use yii\widgets\Breadcrumbs; use yii\widgets\Breadcrumbs;
/** /**
* @var $this \yii\base\View * @var $this \yii\web\View
* @var $content string * @var $content string
*/ */
app\config\AppAsset::register($this); app\config\AppAsset::register($this);

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

@ -2,7 +2,7 @@
use yii\helpers\Html; use yii\helpers\Html;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
*/ */
$this->title = 'About'; $this->title = 'About';
$this->params['breadcrumbs'][] = $this->title; $this->params['breadcrumbs'][] = $this->title;

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

@ -4,7 +4,7 @@ use yii\widgets\ActiveForm;
use yii\captcha\Captcha; use yii\captcha\Captcha;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\widgets\ActiveForm $form * @var yii\widgets\ActiveForm $form
* @var app\models\ContactForm $model * @var app\models\ContactForm $model
*/ */

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

@ -3,7 +3,7 @@
use yii\helpers\Html; use yii\helpers\Html;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var string $name * @var string $name
* @var string $message * @var string $message
* @var Exception $exception * @var Exception $exception

2
apps/basic/views/site/index.php

@ -1,6 +1,6 @@
<?php <?php
/** /**
* @var yii\base\View $this * @var yii\web\View $this
*/ */
$this->title = 'My Yii Application'; $this->title = 'My Yii Application';
?> ?>

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

@ -3,7 +3,7 @@ use yii\helpers\Html;
use yii\widgets\ActiveForm; use yii\widgets\ActiveForm;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\widgets\ActiveForm $form * @var yii\widgets\ActiveForm $form
* @var app\models\LoginForm $model * @var app\models\LoginForm $model
*/ */

2
docs/guide/template.md

@ -10,7 +10,7 @@ a custom template engines by reconfiguring this component's behavior:
[ [
'components' => [ 'components' => [
'view' => [ 'view' => [
'class' => 'yii\base\View', 'class' => 'yii\web\View',
'renderers' => [ 'renderers' => [
'tpl' => [ 'tpl' => [
'class' => 'yii\renderers\SmartyViewRenderer', 'class' => 'yii\renderers\SmartyViewRenderer',

4
docs/guide/view.md

@ -113,7 +113,7 @@ to learn more refer to [Using template engines](template.md) section of the guid
Using View object in templates Using View object in templates
------------------------------ ------------------------------
An instance of `yii\base\View` component is available in view templates as `$this` variable. Using it in templates you An instance of `yii\web\View` component is available in view templates as `$this` variable. Using it in templates you
can do many useful things including setting page title and meta, registering scripts and accessing the context. can do many useful things including setting page title and meta, registering scripts and accessing the context.
### Setting page title ### Setting page title
@ -342,7 +342,7 @@ Customizing View component
-------------------------- --------------------------
Since view is also an application component named `view` you can replace it with your own component that extends Since view is also an application component named `view` you can replace it with your own component that extends
from `yii\base\View`. It can be done via application configuration file such as `config/web.php`: from `yii\base\View` or `yii\web\View`. It can be done via application configuration file such as `config/web.php`:
```php ```php
return [ return [

2
extensions/debug/Module.php

@ -9,7 +9,7 @@ namespace yii\debug;
use Yii; use Yii;
use yii\base\Application; use yii\base\Application;
use yii\base\View; use yii\web\View;
use yii\web\HttpException; use yii\web\HttpException;
/** /**

2
extensions/debug/views/default/index.php

@ -3,7 +3,7 @@
use yii\helpers\Html; use yii\helpers\Html;
/** /**
* @var \yii\base\View $this * @var \yii\web\View $this
* @var array $manifest * @var array $manifest
*/ */

2
extensions/debug/views/default/toolbar.php

@ -1,6 +1,6 @@
<?php <?php
/** /**
* @var \yii\base\View $this * @var \yii\web\View $this
* @var \yii\debug\Panel[] $panels * @var \yii\debug\Panel[] $panels
* @var string $tag * @var string $tag
*/ */

2
extensions/debug/views/default/view.php

@ -5,7 +5,7 @@ use yii\bootstrap\ButtonGroup;
use yii\helpers\Html; use yii\helpers\Html;
/** /**
* @var \yii\base\View $this * @var \yii\web\View $this
* @var array $summary * @var array $summary
* @var string $tag * @var string $tag
* @var array $manifest * @var array $manifest

2
extensions/debug/views/layouts/main.php

@ -1,6 +1,6 @@
<?php <?php
/** /**
* @var \yii\base\View $this * @var \yii\web\View $this
* @var string $content * @var string $content
*/ */
use yii\helpers\Html; use yii\helpers\Html;

2
extensions/gii/Generator.php

@ -11,7 +11,7 @@ use Yii;
use ReflectionClass; use ReflectionClass;
use yii\base\InvalidConfigException; use yii\base\InvalidConfigException;
use yii\base\Model; use yii\base\Model;
use yii\base\View; use yii\web\View;
/** /**

2
extensions/gii/generators/controller/form.php

@ -1,6 +1,6 @@
<?php <?php
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\widgets\ActiveForm $form * @var yii\widgets\ActiveForm $form
* @var yii\gii\generators\controller\Generator $generator * @var yii\gii\generators\controller\Generator $generator
*/ */

2
extensions/gii/generators/controller/templates/controller.php

@ -5,7 +5,7 @@ use yii\helpers\Inflector;
/** /**
* This is the template for generating a controller class file. * This is the template for generating a controller class file.
* *
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\gii\generators\controller\Generator $generator * @var yii\gii\generators\controller\Generator $generator
*/ */

4
extensions/gii/generators/controller/templates/view.php

@ -2,7 +2,7 @@
/** /**
* This is the template for generating an action view file. * This is the template for generating an action view file.
* *
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\gii\generators\controller\Generator $generator * @var yii\gii\generators\controller\Generator $generator
* @var string $action the action ID * @var string $action the action ID
*/ */
@ -10,7 +10,7 @@
echo "<?php\n"; echo "<?php\n";
?> ?>
/** /**
* @var yii\base\View $this * @var yii\web\View $this
*/ */
<?= "?>" ?> <?= "?>" ?>

2
extensions/gii/generators/crud/form.php

@ -1,6 +1,6 @@
<?php <?php
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\widgets\ActiveForm $form * @var yii\widgets\ActiveForm $form
* @var yii\gii\generators\crud\Generator $generator * @var yii\gii\generators\crud\Generator $generator
*/ */

2
extensions/gii/generators/crud/templates/controller.php

@ -5,7 +5,7 @@ use yii\helpers\StringHelper;
/** /**
* This is the template for generating a CRUD controller class file. * This is the template for generating a CRUD controller class file.
* *
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\gii\generators\crud\Generator $generator * @var yii\gii\generators\crud\Generator $generator
*/ */

2
extensions/gii/generators/crud/templates/search.php

@ -5,7 +5,7 @@ use yii\helpers\StringHelper;
/** /**
* This is the template for generating a CRUD controller class file. * This is the template for generating a CRUD controller class file.
* *
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\gii\generators\crud\Generator $generator * @var yii\gii\generators\crud\Generator $generator
*/ */

4
extensions/gii/generators/crud/templates/views/_form.php

@ -4,7 +4,7 @@ use yii\helpers\Inflector;
use yii\helpers\StringHelper; use yii\helpers\StringHelper;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\gii\generators\crud\Generator $generator * @var yii\gii\generators\crud\Generator $generator
*/ */
@ -22,7 +22,7 @@ use yii\helpers\Html;
use yii\widgets\ActiveForm; use yii\widgets\ActiveForm;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var <?= ltrim($generator->modelClass, '\\') ?> $model * @var <?= ltrim($generator->modelClass, '\\') ?> $model
* @var yii\widgets\ActiveForm $form * @var yii\widgets\ActiveForm $form
*/ */

4
extensions/gii/generators/crud/templates/views/_search.php

@ -4,7 +4,7 @@ use yii\helpers\Inflector;
use yii\helpers\StringHelper; use yii\helpers\StringHelper;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\gii\generators\crud\Generator $generator * @var yii\gii\generators\crud\Generator $generator
*/ */
@ -15,7 +15,7 @@ use yii\helpers\Html;
use yii\widgets\ActiveForm; use yii\widgets\ActiveForm;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var <?= ltrim($generator->searchModelClass, '\\') ?> $model * @var <?= ltrim($generator->searchModelClass, '\\') ?> $model
* @var yii\widgets\ActiveForm $form * @var yii\widgets\ActiveForm $form
*/ */

4
extensions/gii/generators/crud/templates/views/create.php

@ -4,7 +4,7 @@ use yii\helpers\Inflector;
use yii\helpers\StringHelper; use yii\helpers\StringHelper;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\gii\generators\crud\Generator $generator * @var yii\gii\generators\crud\Generator $generator
*/ */
@ -14,7 +14,7 @@ echo "<?php\n";
use yii\helpers\Html; use yii\helpers\Html;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var <?= ltrim($generator->modelClass, '\\') ?> $model * @var <?= ltrim($generator->modelClass, '\\') ?> $model
*/ */

4
extensions/gii/generators/crud/templates/views/index.php

@ -4,7 +4,7 @@ use yii\helpers\Inflector;
use yii\helpers\StringHelper; use yii\helpers\StringHelper;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\gii\generators\crud\Generator $generator * @var yii\gii\generators\crud\Generator $generator
*/ */
@ -18,7 +18,7 @@ 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\web\View $this
* @var yii\data\ActiveDataProvider $dataProvider * @var yii\data\ActiveDataProvider $dataProvider
* @var <?= ltrim($generator->searchModelClass, '\\') ?> $searchModel * @var <?= ltrim($generator->searchModelClass, '\\') ?> $searchModel
*/ */

4
extensions/gii/generators/crud/templates/views/update.php

@ -4,7 +4,7 @@ use yii\helpers\Inflector;
use yii\helpers\StringHelper; use yii\helpers\StringHelper;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\gii\generators\crud\Generator $generator * @var yii\gii\generators\crud\Generator $generator
*/ */
@ -16,7 +16,7 @@ echo "<?php\n";
use yii\helpers\Html; use yii\helpers\Html;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var <?= ltrim($generator->modelClass, '\\') ?> $model * @var <?= ltrim($generator->modelClass, '\\') ?> $model
*/ */

4
extensions/gii/generators/crud/templates/views/view.php

@ -4,7 +4,7 @@ use yii\helpers\Inflector;
use yii\helpers\StringHelper; use yii\helpers\StringHelper;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\gii\generators\crud\Generator $generator * @var yii\gii\generators\crud\Generator $generator
*/ */
@ -17,7 +17,7 @@ use yii\helpers\Html;
use yii\widgets\DetailView; use yii\widgets\DetailView;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var <?= ltrim($generator->modelClass, '\\') ?> $model * @var <?= ltrim($generator->modelClass, '\\') ?> $model
*/ */

2
extensions/gii/generators/form/form.php

@ -1,6 +1,6 @@
<?php <?php
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\widgets\ActiveForm $form * @var yii\widgets\ActiveForm $form
* @var yii\gii\generators\form\Generator $generator * @var yii\gii\generators\form\Generator $generator
*/ */

2
extensions/gii/generators/form/templates/action.php

@ -5,7 +5,7 @@ use yii\helpers\Inflector;
/** /**
* This is the template for generating an action view file. * This is the template for generating an action view file.
* *
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\gii\generators\form\Generator $generator * @var yii\gii\generators\form\Generator $generator
*/ */

4
extensions/gii/generators/form/templates/form.php

@ -2,7 +2,7 @@
/** /**
* This is the template for generating an action view file. * This is the template for generating an action view file.
* *
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\gii\generators\form\Generator $generator * @var yii\gii\generators\form\Generator $generator
*/ */
@ -13,7 +13,7 @@ use yii\helpers\Html;
use yii\widgets\ActiveForm; use yii\widgets\ActiveForm;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var <?= $generator->modelClass ?> $model * @var <?= $generator->modelClass ?> $model
* @var ActiveForm $form * @var ActiveForm $form
*/ */

2
extensions/gii/generators/model/form.php

@ -1,6 +1,6 @@
<?php <?php
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\widgets\ActiveForm $form * @var yii\widgets\ActiveForm $form
* @var yii\gii\generators\form\Generator $generator * @var yii\gii\generators\form\Generator $generator
*/ */

2
extensions/gii/generators/model/templates/model.php

@ -2,7 +2,7 @@
/** /**
* This is the template for generating the model class of a specified table. * This is the template for generating the model class of a specified table.
* *
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\gii\generators\model\Generator $generator * @var yii\gii\generators\model\Generator $generator
* @var string $tableName full table name * @var string $tableName full table name
* @var string $className class name * @var string $className class name

2
extensions/gii/generators/module/form.php

@ -1,6 +1,6 @@
<?php <?php
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\widgets\ActiveForm $form * @var yii\widgets\ActiveForm $form
* @var yii\gii\generators\module\Generator $generator * @var yii\gii\generators\module\Generator $generator
*/ */

2
extensions/gii/generators/module/templates/controller.php

@ -2,7 +2,7 @@
/** /**
* This is the template for generating a controller class within a module. * This is the template for generating a controller class within a module.
* *
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\gii\generators\module\Generator $generator * @var yii\gii\generators\module\Generator $generator
*/ */
echo "<?php\n"; echo "<?php\n";

2
extensions/gii/generators/module/templates/module.php

@ -2,7 +2,7 @@
/** /**
* This is the template for generating a module class file. * This is the template for generating a module class file.
* *
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\gii\generators\module\Generator $generator * @var yii\gii\generators\module\Generator $generator
*/ */
$className = $generator->moduleClass; $className = $generator->moduleClass;

2
extensions/gii/generators/module/templates/view.php

@ -1,6 +1,6 @@
<?php <?php
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\gii\generators\module\Generator $generator * @var yii\gii\generators\module\Generator $generator
*/ */
?> ?>

2
extensions/gii/views/default/diff.php

@ -1,6 +1,6 @@
<?php <?php
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var mixed $diff * @var mixed $diff
*/ */
?> ?>

2
extensions/gii/views/default/index.php

@ -2,7 +2,7 @@
use yii\helpers\Html; use yii\helpers\Html;
/** /**
* @var $this \yii\base\View * @var $this \yii\web\View
* @var $content string * @var $content string
* @var yii\gii\Generator[] $generators * @var yii\gii\Generator[] $generators
* @var yii\gii\Generator $activeGenerator * @var yii\gii\Generator $activeGenerator

2
extensions/gii/views/default/view.php

@ -6,7 +6,7 @@ use yii\gii\components\ActiveField;
use yii\gii\CodeFile; use yii\gii\CodeFile;
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\gii\Generator $generator * @var yii\gii\Generator $generator
* @var string $id * @var string $id
* @var yii\widgets\ActiveForm $form * @var yii\widgets\ActiveForm $form

2
extensions/gii/views/default/view/files.php

@ -4,7 +4,7 @@ use yii\helpers\Html;
use yii\gii\CodeFile; use yii\gii\CodeFile;
/** /**
* @var $this \yii\base\View * @var $this \yii\web\View
* @var $generator \yii\gii\Generator * @var $generator \yii\gii\Generator
* @var CodeFile[] $files * @var CodeFile[] $files
* @var array $answers * @var array $answers

2
extensions/gii/views/default/view/results.php

@ -1,6 +1,6 @@
<?php <?php
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var yii\gii\Generator $generator * @var yii\gii\Generator $generator
* @var string $results * @var string $results
* @var boolean $hasError * @var boolean $hasError

2
extensions/gii/views/layouts/generator.php

@ -2,7 +2,7 @@
use yii\helpers\Html; use yii\helpers\Html;
/** /**
* @var $this \yii\base\View * @var $this \yii\web\View
* @var $content string * @var $content string
* @var yii\gii\Generator[] $generators * @var yii\gii\Generator[] $generators
* @var yii\gii\Generator $activeGenerator * @var yii\gii\Generator $activeGenerator

2
extensions/gii/views/layouts/main.php

@ -4,7 +4,7 @@ use yii\bootstrap\Nav;
use yii\helpers\Html; use yii\helpers\Html;
/** /**
* @var $this \yii\base\View * @var $this \yii\web\View
* @var $content string * @var $content string
*/ */
$asset = yii\gii\GiiAsset::register($this); $asset = yii\gii\GiiAsset::register($this);

2
framework/yii/base/Application.php

@ -471,7 +471,7 @@ abstract class Application extends Module
'formatter' => ['class' => 'yii\base\Formatter'], 'formatter' => ['class' => 'yii\base\Formatter'],
'i18n' => ['class' => 'yii\i18n\I18N'], 'i18n' => ['class' => 'yii\i18n\I18N'],
'urlManager' => ['class' => 'yii\web\UrlManager'], 'urlManager' => ['class' => 'yii\web\UrlManager'],
'view' => ['class' => 'yii\base\View'], 'view' => ['class' => 'yii\web\View'],
]); ]);
} }

405
framework/yii/base/View.php

@ -9,9 +9,6 @@ namespace yii\base;
use Yii; use Yii;
use yii\helpers\FileHelper; use yii\helpers\FileHelper;
use yii\helpers\Html;
use yii\web\JqueryAsset;
use yii\web\AssetBundle;
use yii\widgets\Block; use yii\widgets\Block;
use yii\widgets\ContentDecorator; use yii\widgets\ContentDecorator;
use yii\widgets\FragmentCache; use yii\widgets\FragmentCache;
@ -21,9 +18,6 @@ use yii\widgets\FragmentCache;
* *
* View provides a set of methods (e.g. [[render()]]) for rendering purpose. * View provides a set of methods (e.g. [[render()]]) for rendering purpose.
* *
* @property \yii\web\AssetManager $assetManager The asset manager. Defaults to the "assetManager" application
* component.
*
* @author Qiang Xue <qiang.xue@gmail.com> * @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0 * @since 2.0
*/ */
@ -38,14 +32,6 @@ class View extends Component
*/ */
const EVENT_END_PAGE = 'endPage'; const EVENT_END_PAGE = 'endPage';
/** /**
* @event Event an event that is triggered by [[beginBody()]].
*/
const EVENT_BEGIN_BODY = 'beginBody';
/**
* @event Event an event that is triggered by [[endBody()]].
*/
const EVENT_END_BODY = 'endBody';
/**
* @event ViewEvent an event that is triggered by [[renderFile()]] right before it renders a view file. * @event ViewEvent an event that is triggered by [[renderFile()]] right before it renders a view file.
*/ */
const EVENT_BEFORE_RENDER = 'beforeRender'; const EVENT_BEFORE_RENDER = 'beforeRender';
@ -55,40 +41,6 @@ class View extends Component
const EVENT_AFTER_RENDER = 'afterRender'; const EVENT_AFTER_RENDER = 'afterRender';
/** /**
* The location of registered JavaScript code block or files.
* This means the location is in the head section.
*/
const POS_HEAD = 1;
/**
* The location of registered JavaScript code block or files.
* This means the location is at the beginning of the body section.
*/
const POS_BEGIN = 2;
/**
* The location of registered JavaScript code block or files.
* This means the location is at the end of the body section.
*/
const POS_END = 3;
/**
* The location of registered JavaScript code block.
* This means the JavaScript code block will be enclosed within `jQuery(document).ready()`.
*/
const POS_READY = 4;
/**
* This is internally used as the placeholder for receiving the content registered for the head section.
*/
const PH_HEAD = '<![CDATA[YII-BLOCK-HEAD]]>';
/**
* This is internally used as the placeholder for receiving the content registered for the beginning of the body section.
*/
const PH_BODY_BEGIN = '<![CDATA[YII-BLOCK-BODY-BEGIN]]>';
/**
* This is internally used as the placeholder for receiving the content registered for the end of the body section.
*/
const PH_BODY_END = '<![CDATA[YII-BLOCK-BODY-END]]>';
/**
* @var ViewContextInterface the context under which the [[renderFile()]] method is being invoked. * @var ViewContextInterface the context under which the [[renderFile()]] method is being invoked.
*/ */
public $context; public $context;
@ -136,46 +88,6 @@ class View extends Component
* @internal * @internal
*/ */
public $dynamicPlaceholders = []; public $dynamicPlaceholders = [];
/**
* @var AssetBundle[] list of the registered asset bundles. The keys are the bundle names, and the values
* are the registered [[AssetBundle]] objects.
* @see registerAssetBundle
*/
public $assetBundles = [];
/**
* @var string the page title
*/
public $title;
/**
* @var array the registered meta tags.
* @see registerMetaTag
*/
public $metaTags;
/**
* @var array the registered link tags.
* @see registerLinkTag
*/
public $linkTags;
/**
* @var array the registered CSS code blocks.
* @see registerCss
*/
public $css;
/**
* @var array the registered CSS files.
* @see registerCssFile
*/
public $cssFiles;
/**
* @var array the registered JS code blocks
* @see registerJs
*/
public $js;
/**
* @var array the registered JS files.
* @see registerJsFile
*/
public $jsFiles;
/** /**
@ -516,29 +428,8 @@ class View extends Component
FragmentCache::end(); FragmentCache::end();
} }
private $_assetManager;
/**
* Registers the asset manager being used by this view object.
* @return \yii\web\AssetManager the asset manager. Defaults to the "assetManager" application component.
*/
public function getAssetManager()
{
return $this->_assetManager ?: Yii::$app->getAssetManager();
}
/**
* Sets the asset manager.
* @param \yii\web\AssetManager $value the asset manager
*/
public function setAssetManager($value)
{
$this->_assetManager = $value;
}
/** /**
* Marks the beginning of an HTML page. * Marks the beginning of a page.
*/ */
public function beginPage() public function beginPage()
{ {
@ -549,301 +440,11 @@ class View extends Component
} }
/** /**
* Marks the ending of an HTML page. * Marks the ending of a page.
*/ */
public function endPage() public function endPage()
{ {
$this->trigger(self::EVENT_END_PAGE); $this->trigger(self::EVENT_END_PAGE);
ob_end_flush();
$content = ob_get_clean();
foreach (array_keys($this->assetBundles) as $bundle) {
$this->registerAssetFiles($bundle);
}
echo strtr($content, [
self::PH_HEAD => $this->renderHeadHtml(),
self::PH_BODY_BEGIN => $this->renderBodyBeginHtml(),
self::PH_BODY_END => $this->renderBodyEndHtml(),
]);
unset(
$this->metaTags,
$this->linkTags,
$this->css,
$this->cssFiles,
$this->js,
$this->jsFiles
);
}
/**
* Registers all files provided by an asset bundle including depending bundles files.
* Removes a bundle from [[assetBundles]] once files are registered.
* @param string $name name of the bundle to register
*/
private function registerAssetFiles($name)
{
if (!isset($this->assetBundles[$name])) {
return;
}
$bundle = $this->assetBundles[$name];
foreach ($bundle->depends as $dep) {
$this->registerAssetFiles($dep);
}
$bundle->registerAssetFiles($this);
unset($this->assetBundles[$name]);
}
/**
* Marks the beginning of an HTML body section.
*/
public function beginBody()
{
echo self::PH_BODY_BEGIN;
$this->trigger(self::EVENT_BEGIN_BODY);
}
/**
* Marks the ending of an HTML body section.
*/
public function endBody()
{
$this->trigger(self::EVENT_END_BODY);
echo self::PH_BODY_END;
}
/**
* Marks the position of an HTML head section.
*/
public function head()
{
echo self::PH_HEAD;
}
/**
* Registers the named asset bundle.
* All dependent asset bundles will be registered.
* @param string $name the name of the asset bundle.
* @param integer|null $position if set, this forces a minimum position for javascript files.
* This will adjust depending assets javascript file position or fail if requirement can not be met.
* If this is null, asset bundles position settings will not be changed.
* See [[registerJsFile]] for more details on javascript position.
* @return AssetBundle the registered asset bundle instance
* @throws InvalidConfigException if the asset bundle does not exist or a circular dependency is detected
*/
public function registerAssetBundle($name, $position = null)
{
if (!isset($this->assetBundles[$name])) {
$am = $this->getAssetManager();
$bundle = $am->getBundle($name);
$this->assetBundles[$name] = false;
// register dependencies
$pos = isset($bundle->jsOptions['position']) ? $bundle->jsOptions['position'] : null;
foreach ($bundle->depends as $dep) {
$this->registerAssetBundle($dep, $pos);
}
$this->assetBundles[$name] = $bundle;
} elseif ($this->assetBundles[$name] === false) {
throw new InvalidConfigException("A circular dependency is detected for bundle '$name'.");
} else {
$bundle = $this->assetBundles[$name];
}
if ($position !== null) {
$pos = isset($bundle->jsOptions['position']) ? $bundle->jsOptions['position'] : null;
if ($pos === null) {
$bundle->jsOptions['position'] = $pos = $position;
} elseif ($pos > $position) {
throw new InvalidConfigException("An asset bundle that depends on '$name' has a higher javascript file position configured than '$name'.");
}
// update position for all dependencies
foreach ($bundle->depends as $dep) {
$this->registerAssetBundle($dep, $pos);
}
}
return $bundle;
}
/**
* Registers a meta tag.
* @param array $options the HTML attributes for the meta tag.
* @param string $key the key that identifies the meta tag. If two meta tags are registered
* with the same key, the latter will overwrite the former. If this is null, the new meta tag
* will be appended to the existing ones.
*/
public function registerMetaTag($options, $key = null)
{
if ($key === null) {
$this->metaTags[] = Html::tag('meta', '', $options);
} else {
$this->metaTags[$key] = Html::tag('meta', '', $options);
}
}
/**
* Registers a link tag.
* @param array $options the HTML attributes for the link tag.
* @param string $key the key that identifies the link tag. If two link tags are registered
* with the same key, the latter will overwrite the former. If this is null, the new link tag
* will be appended to the existing ones.
*/
public function registerLinkTag($options, $key = null)
{
if ($key === null) {
$this->linkTags[] = Html::tag('link', '', $options);
} else {
$this->linkTags[$key] = Html::tag('link', '', $options);
}
}
/**
* Registers a CSS code block.
* @param string $css the CSS code block to be registered
* @param array $options the HTML attributes for the style tag.
* @param string $key the key that identifies the CSS code block. If null, it will use
* $css as the key. If two CSS code blocks are registered with the same key, the latter
* will overwrite the former.
*/
public function registerCss($css, $options = [], $key = null)
{
$key = $key ?: md5($css);
$this->css[$key] = Html::style($css, $options);
}
/**
* Registers a CSS file.
* @param string $url the CSS file to be registered.
* @param array $options the HTML attributes for the link tag.
* @param string $key the key that identifies the CSS script file. If null, it will use
* $url as the key. If two CSS files are registered with the same key, the latter
* will overwrite the former.
*/
public function registerCssFile($url, $options = [], $key = null)
{
$key = $key ?: $url;
$this->cssFiles[$key] = Html::cssFile($url, $options);
}
/**
* Registers a JS code block.
* @param string $js the JS code block to be registered
* @param integer $position the position at which the JS script tag should be inserted
* in a page. The possible values are:
*
* - [[POS_HEAD]]: in the head section
* - [[POS_BEGIN]]: at the beginning of the body section
* - [[POS_END]]: at the end of the body section
* - [[POS_READY]]: enclosed within jQuery(document).ready(). This is the default value.
* Note that by using this position, the method will automatically register the jQuery js file.
*
* @param string $key the key that identifies the JS code block. If null, it will use
* $js as the key. If two JS code blocks are registered with the same key, the latter
* will overwrite the former.
*/
public function registerJs($js, $position = self::POS_READY, $key = null)
{
$key = $key ?: md5($js);
$this->js[$position][$key] = $js;
if ($position === self::POS_READY) {
JqueryAsset::register($this);
}
}
/**
* Registers a JS file.
* Please note that when this file depends on other JS files to be registered before,
* for example jQuery, you should use [[registerAssetBundle]] instead.
* @param string $url the JS file to be registered.
* @param array $options the HTML attributes for the script tag. A special option
* named "position" is supported which specifies where the JS script tag should be inserted
* in a page. The possible values of "position" are:
*
* - [[POS_HEAD]]: in the head section
* - [[POS_BEGIN]]: at the beginning of the body section
* - [[POS_END]]: at the end of the body section. This is the default value.
*
* @param string $key the key that identifies the JS script file. If null, it will use
* $url as the key. If two JS files are registered with the same key, the latter
* will overwrite the former.
*/
public function registerJsFile($url, $options = [], $key = null)
{
$position = isset($options['position']) ? $options['position'] : self::POS_END;
unset($options['position']);
$key = $key ?: $url;
$this->jsFiles[$position][$key] = Html::jsFile($url, $options);
}
/**
* Renders the content to be inserted in the head section.
* The content is rendered using the registered meta tags, link tags, CSS/JS code blocks and files.
* @return string the rendered content
*/
protected function renderHeadHtml()
{
$lines = [];
if (!empty($this->metaTags)) {
$lines[] = implode("\n", $this->metaTags);
}
$request = Yii::$app->getRequest();
if ($request instanceof \yii\web\Request && $request->enableCsrfValidation) {
$lines[] = Html::tag('meta', '', ['name' => 'csrf-var', 'content' => $request->csrfVar]);
$lines[] = Html::tag('meta', '', ['name' => 'csrf-token', 'content' => $request->getCsrfToken()]);
}
if (!empty($this->linkTags)) {
$lines[] = implode("\n", $this->linkTags);
}
if (!empty($this->cssFiles)) {
$lines[] = implode("\n", $this->cssFiles);
}
if (!empty($this->css)) {
$lines[] = implode("\n", $this->css);
}
if (!empty($this->jsFiles[self::POS_HEAD])) {
$lines[] = implode("\n", $this->jsFiles[self::POS_HEAD]);
}
if (!empty($this->js[self::POS_HEAD])) {
$lines[] = Html::script(implode("\n", $this->js[self::POS_HEAD]), ['type' => 'text/javascript']);
}
return empty($lines) ? '' : implode("\n", $lines);
}
/**
* Renders the content to be inserted at the beginning of the body section.
* The content is rendered using the registered JS code blocks and files.
* @return string the rendered content
*/
protected function renderBodyBeginHtml()
{
$lines = [];
if (!empty($this->jsFiles[self::POS_BEGIN])) {
$lines[] = implode("\n", $this->jsFiles[self::POS_BEGIN]);
}
if (!empty($this->js[self::POS_BEGIN])) {
$lines[] = Html::script(implode("\n", $this->js[self::POS_BEGIN]), ['type' => 'text/javascript']);
}
return empty($lines) ? '' : implode("\n", $lines);
}
/**
* Renders the content to be inserted at the end of the body section.
* The content is rendered using the registered JS code blocks and files.
* @return string the rendered content
*/
protected function renderBodyEndHtml()
{
$lines = [];
if (!empty($this->jsFiles[self::POS_END])) {
$lines[] = implode("\n", $this->jsFiles[self::POS_END]);
}
if (!empty($this->js[self::POS_END])) {
$lines[] = Html::script(implode("\n", $this->js[self::POS_END]), ['type' => 'text/javascript']);
}
if (!empty($this->js[self::POS_READY])) {
$js = "jQuery(document).ready(function(){\n" . implode("\n", $this->js[self::POS_READY]) . "\n});";
$lines[] = Html::script($js, ['type' => 'text/javascript']);
}
return empty($lines) ? '' : implode("\n", $lines);
} }
} }

2
framework/yii/captcha/CaptchaValidator.php

@ -96,7 +96,7 @@ class CaptchaValidator extends Validator
* Returns the JavaScript needed for performing client-side validation. * Returns the JavaScript needed for performing client-side validation.
* @param \yii\base\Model $object the data object being validated * @param \yii\base\Model $object the data object being validated
* @param string $attribute the name of the attribute to be validated. * @param string $attribute the name of the attribute to be validated.
* @param \yii\base\View $view the view object that is going to be used to render views or view files * @param \yii\web\View $view the view object that is going to be used to render views or view files
* containing a model form with this validator applied. * containing a model form with this validator applied.
* @return string the client-side validation script. * @return string the client-side validation script.
*/ */

1
framework/yii/classes.php

@ -213,6 +213,7 @@ return [
'yii\web\User' => YII_PATH . '/web/User.php', 'yii\web\User' => YII_PATH . '/web/User.php',
'yii\web\UserEvent' => YII_PATH . '/web/UserEvent.php', 'yii\web\UserEvent' => YII_PATH . '/web/UserEvent.php',
'yii\web\VerbFilter' => YII_PATH . '/web/VerbFilter.php', 'yii\web\VerbFilter' => YII_PATH . '/web/VerbFilter.php',
'yii\web\View' => YII_PATH . '/web/View.php',
'yii\web\XmlResponseFormatter' => YII_PATH . '/web/XmlResponseFormatter.php', 'yii\web\XmlResponseFormatter' => YII_PATH . '/web/XmlResponseFormatter.php',
'yii\web\YiiAsset' => YII_PATH . '/web/YiiAsset.php', 'yii\web\YiiAsset' => YII_PATH . '/web/YiiAsset.php',
'yii\widgets\ActiveField' => YII_PATH . '/widgets/ActiveField.php', 'yii\widgets\ActiveField' => YII_PATH . '/widgets/ActiveField.php',

2
framework/yii/validators/BooleanValidator.php

@ -79,7 +79,7 @@ class BooleanValidator extends Validator
* Returns the JavaScript needed for performing client-side validation. * Returns the JavaScript needed for performing client-side validation.
* @param \yii\base\Model $object the data object being validated * @param \yii\base\Model $object the data object being validated
* @param string $attribute the name of the attribute to be validated. * @param string $attribute the name of the attribute to be validated.
* @param \yii\base\View $view the view object that is going to be used to render views or view files * @param \yii\web\View $view the view object that is going to be used to render views or view files
* containing a model form with this validator applied. * containing a model form with this validator applied.
* @return string the client-side validation script. * @return string the client-side validation script.
*/ */

2
framework/yii/validators/CompareValidator.php

@ -179,7 +179,7 @@ class CompareValidator extends Validator
* @param \yii\base\Model $object the data object being validated * @param \yii\base\Model $object the data object being validated
* @param string $attribute the name of the attribute to be validated * @param string $attribute the name of the attribute to be validated
* @return string the client-side validation script * @return string the client-side validation script
* @param \yii\base\View $view the view object that is going to be used to render views or view files * @param \yii\web\View $view the view object that is going to be used to render views or view files
* containing a model form with this validator applied. * containing a model form with this validator applied.
* @throws InvalidConfigException if CompareValidator::operator is invalid * @throws InvalidConfigException if CompareValidator::operator is invalid
*/ */

2
framework/yii/validators/EmailValidator.php

@ -119,7 +119,7 @@ class EmailValidator extends Validator
* Returns the JavaScript needed for performing client-side validation. * Returns the JavaScript needed for performing client-side validation.
* @param \yii\base\Model $object the data object being validated * @param \yii\base\Model $object the data object being validated
* @param string $attribute the name of the attribute to be validated. * @param string $attribute the name of the attribute to be validated.
* @param \yii\base\View $view the view object that is going to be used to render views or view files * @param \yii\web\View $view the view object that is going to be used to render views or view files
* containing a model form with this validator applied. * containing a model form with this validator applied.
* @return string the client-side validation script. * @return string the client-side validation script.
*/ */

2
framework/yii/validators/InlineValidator.php

@ -79,7 +79,7 @@ class InlineValidator extends Validator
* *
* @param \yii\base\Model $object the data object being validated * @param \yii\base\Model $object the data object being validated
* @param string $attribute the name of the attribute to be validated. * @param string $attribute the name of the attribute to be validated.
* @param \yii\base\View $view the view object that is going to be used to render views or view files * @param \yii\web\View $view the view object that is going to be used to render views or view files
* containing a model form with this validator applied. * containing a model form with this validator applied.
* @return string the client-side validation script. Null if the validator does not support * @return string the client-side validation script. Null if the validator does not support
* client-side validation. * client-side validation.

2
framework/yii/validators/NumberValidator.php

@ -114,7 +114,7 @@ class NumberValidator extends Validator
* Returns the JavaScript needed for performing client-side validation. * Returns the JavaScript needed for performing client-side validation.
* @param \yii\base\Model $object the data object being validated * @param \yii\base\Model $object the data object being validated
* @param string $attribute the name of the attribute to be validated. * @param string $attribute the name of the attribute to be validated.
* @param \yii\base\View $view the view object that is going to be used to render views or view files * @param \yii\web\View $view the view object that is going to be used to render views or view files
* containing a model form with this validator applied. * containing a model form with this validator applied.
* @return string the client-side validation script. * @return string the client-side validation script.
*/ */

2
framework/yii/validators/RangeValidator.php

@ -81,7 +81,7 @@ class RangeValidator extends Validator
* Returns the JavaScript needed for performing client-side validation. * Returns the JavaScript needed for performing client-side validation.
* @param \yii\base\Model $object the data object being validated * @param \yii\base\Model $object the data object being validated
* @param string $attribute the name of the attribute to be validated. * @param string $attribute the name of the attribute to be validated.
* @param \yii\base\View $view the view object that is going to be used to render views or view files * @param \yii\web\View $view the view object that is going to be used to render views or view files
* containing a model form with this validator applied. * containing a model form with this validator applied.
* @return string the client-side validation script. * @return string the client-side validation script.
*/ */

2
framework/yii/validators/RegularExpressionValidator.php

@ -78,7 +78,7 @@ class RegularExpressionValidator extends Validator
* Returns the JavaScript needed for performing client-side validation. * Returns the JavaScript needed for performing client-side validation.
* @param \yii\base\Model $object the data object being validated * @param \yii\base\Model $object the data object being validated
* @param string $attribute the name of the attribute to be validated. * @param string $attribute the name of the attribute to be validated.
* @param \yii\base\View $view the view object that is going to be used to render views or view files * @param \yii\web\View $view the view object that is going to be used to render views or view files
* containing a model form with this validator applied. * containing a model form with this validator applied.
* @return string the client-side validation script. * @return string the client-side validation script.
*/ */

2
framework/yii/validators/RequiredValidator.php

@ -102,7 +102,7 @@ class RequiredValidator extends Validator
* Returns the JavaScript needed for performing client-side validation. * Returns the JavaScript needed for performing client-side validation.
* @param \yii\base\Model $object the data object being validated * @param \yii\base\Model $object the data object being validated
* @param string $attribute the name of the attribute to be validated. * @param string $attribute the name of the attribute to be validated.
* @param \yii\base\View $view the view object that is going to be used to render views or view files * @param \yii\web\View $view the view object that is going to be used to render views or view files
* containing a model form with this validator applied. * containing a model form with this validator applied.
* @return string the client-side validation script. * @return string the client-side validation script.
*/ */

2
framework/yii/validators/StringValidator.php

@ -142,7 +142,7 @@ class StringValidator extends Validator
* Returns the JavaScript needed for performing client-side validation. * Returns the JavaScript needed for performing client-side validation.
* @param \yii\base\Model $object the data object being validated * @param \yii\base\Model $object the data object being validated
* @param string $attribute the name of the attribute to be validated. * @param string $attribute the name of the attribute to be validated.
* @param \yii\base\View $view the view object that is going to be used to render views or view files * @param \yii\web\View $view the view object that is going to be used to render views or view files
* containing a model form with this validator applied. * containing a model form with this validator applied.
* @return string the client-side validation script. * @return string the client-side validation script.
*/ */

2
framework/yii/validators/UrlValidator.php

@ -115,7 +115,7 @@ class UrlValidator extends Validator
* Returns the JavaScript needed for performing client-side validation. * Returns the JavaScript needed for performing client-side validation.
* @param \yii\base\Model $object the data object being validated * @param \yii\base\Model $object the data object being validated
* @param string $attribute the name of the attribute to be validated. * @param string $attribute the name of the attribute to be validated.
* @param \yii\base\View $view the view object that is going to be used to render views or view files * @param \yii\web\View $view the view object that is going to be used to render views or view files
* containing a model form with this validator applied. * containing a model form with this validator applied.
* @return string the client-side validation script. * @return string the client-side validation script.
* @see \yii\Web\ActiveForm::enableClientValidation * @see \yii\Web\ActiveForm::enableClientValidation

2
framework/yii/validators/Validator.php

@ -215,7 +215,7 @@ abstract class Validator extends Component
* *
* @param \yii\base\Model $object the data object being validated * @param \yii\base\Model $object the data object being validated
* @param string $attribute the name of the attribute to be validated. * @param string $attribute the name of the attribute to be validated.
* @param \yii\base\View $view the view object that is going to be used to render views or view files * @param \yii\web\View $view the view object that is going to be used to render views or view files
* containing a model form with this validator applied. * containing a model form with this validator applied.
* @return string the client-side validation script. Null if the validator does not support * @return string the client-side validation script. Null if the validator does not support
* client-side validation. * client-side validation.

8
framework/yii/web/AssetBundle.php

@ -10,7 +10,7 @@ namespace yii\web;
use Yii; use Yii;
use yii\base\InvalidConfigException; use yii\base\InvalidConfigException;
use yii\base\Object; use yii\base\Object;
use yii\base\View; use yii\web\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.
@ -97,12 +97,12 @@ class AssetBundle extends Object
*/ */
public $css = []; public $css = [];
/** /**
* @var array the options that will be passed to [[\yii\base\View::registerJsFile()]] * @var array the options that will be passed to [[\yii\web\View::registerJsFile()]]
* when registering the JS files in this bundle. * when registering the JS files in this bundle.
*/ */
public $jsOptions = []; public $jsOptions = [];
/** /**
* @var array the options that will be passed to [[\yii\base\View::registerCssFile()]] * @var array the options that will be passed to [[\yii\web\View::registerCssFile()]]
* when registering the CSS files in this bundle. * when registering the CSS files in this bundle.
*/ */
public $cssOptions = []; public $cssOptions = [];
@ -140,7 +140,7 @@ class AssetBundle extends Object
/** /**
* Registers the CSS and JS files with the given view. * Registers the CSS and JS files with the given view.
* @param \yii\base\View $view the view that the asset files are to be registered with. * @param \yii\web\View $view the view that the asset files are to be registered with.
*/ */
public function registerAssetFiles($view) public function registerAssetFiles($view)
{ {

430
framework/yii/web/View.php

@ -0,0 +1,430 @@
<?php
/**
* @link http://www.yiiframework.com/
* @copyright Copyright (c) 2008 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
namespace yii\web;
use Yii;
use yii\helpers\FileHelper;
use yii\helpers\Html;
use yii\web\JqueryAsset;
use yii\web\AssetBundle;
use yii\widgets\Block;
use yii\widgets\ContentDecorator;
use yii\widgets\FragmentCache;
/**
* View represents a view object in the MVC pattern.
*
* View provides a set of methods (e.g. [[render()]]) for rendering purpose.
*
* @property \yii\web\AssetManager $assetManager The asset manager. Defaults to the "assetManager" application
* component.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @since 2.0
*/
class View extends \yii\base\View
{
const EVENT_BEGIN_BODY = 'beginBody';
/**
* @event Event an event that is triggered by [[endBody()]].
*/
const EVENT_END_BODY = 'endBody';
/**
* The location of registered JavaScript code block or files.
* This means the location is in the head section.
*/
const POS_HEAD = 1;
/**
* The location of registered JavaScript code block or files.
* This means the location is at the beginning of the body section.
*/
const POS_BEGIN = 2;
/**
* The location of registered JavaScript code block or files.
* This means the location is at the end of the body section.
*/
const POS_END = 3;
/**
* The location of registered JavaScript code block.
* This means the JavaScript code block will be enclosed within `jQuery(document).ready()`.
*/
const POS_READY = 4;
/**
* This is internally used as the placeholder for receiving the content registered for the head section.
*/
const PH_HEAD = '<![CDATA[YII-BLOCK-HEAD]]>';
/**
* This is internally used as the placeholder for receiving the content registered for the beginning of the body section.
*/
const PH_BODY_BEGIN = '<![CDATA[YII-BLOCK-BODY-BEGIN]]>';
/**
* This is internally used as the placeholder for receiving the content registered for the end of the body section.
*/
const PH_BODY_END = '<![CDATA[YII-BLOCK-BODY-END]]>';
/**
* @var AssetBundle[] list of the registered asset bundles. The keys are the bundle names, and the values
* are the registered [[AssetBundle]] objects.
* @see registerAssetBundle
*/
public $assetBundles = [];
/**
* @var string the page title
*/
public $title;
/**
* @var array the registered meta tags.
* @see registerMetaTag
*/
public $metaTags;
/**
* @var array the registered link tags.
* @see registerLinkTag
*/
public $linkTags;
/**
* @var array the registered CSS code blocks.
* @see registerCss
*/
public $css;
/**
* @var array the registered CSS files.
* @see registerCssFile
*/
public $cssFiles;
/**
* @var array the registered JS code blocks
* @see registerJs
*/
public $js;
/**
* @var array the registered JS files.
* @see registerJsFile
*/
public $jsFiles;
private $_assetManager;
/**
* Registers the asset manager being used by this view object.
* @return \yii\web\AssetManager the asset manager. Defaults to the "assetManager" application component.
*/
public function getAssetManager()
{
return $this->_assetManager ?: Yii::$app->getAssetManager();
}
/**
* Sets the asset manager.
* @param \yii\web\AssetManager $value the asset manager
*/
public function setAssetManager($value)
{
$this->_assetManager = $value;
}
/**
* Marks the ending of an HTML page.
*/
public function endPage()
{
$this->trigger(self::EVENT_END_PAGE);
$content = ob_get_clean();
foreach (array_keys($this->assetBundles) as $bundle) {
$this->registerAssetFiles($bundle);
}
echo strtr($content, [
self::PH_HEAD => $this->renderHeadHtml(),
self::PH_BODY_BEGIN => $this->renderBodyBeginHtml(),
self::PH_BODY_END => $this->renderBodyEndHtml(),
]);
unset(
$this->metaTags,
$this->linkTags,
$this->css,
$this->cssFiles,
$this->js,
$this->jsFiles
);
}
/**
* Registers all files provided by an asset bundle including depending bundles files.
* Removes a bundle from [[assetBundles]] once files are registered.
* @param string $name name of the bundle to register
*/
private function registerAssetFiles($name)
{
if (!isset($this->assetBundles[$name])) {
return;
}
$bundle = $this->assetBundles[$name];
foreach ($bundle->depends as $dep) {
$this->registerAssetFiles($dep);
}
$bundle->registerAssetFiles($this);
unset($this->assetBundles[$name]);
}
/**
* Marks the beginning of an HTML body section.
*/
public function beginBody()
{
echo self::PH_BODY_BEGIN;
$this->trigger(self::EVENT_BEGIN_BODY);
}
/**
* Marks the ending of an HTML body section.
*/
public function endBody()
{
$this->trigger(self::EVENT_END_BODY);
echo self::PH_BODY_END;
}
/**
* Marks the position of an HTML head section.
*/
public function head()
{
echo self::PH_HEAD;
}
/**
* Registers the named asset bundle.
* All dependent asset bundles will be registered.
* @param string $name the name of the asset bundle.
* @param integer|null $position if set, this forces a minimum position for javascript files.
* This will adjust depending assets javascript file position or fail if requirement can not be met.
* If this is null, asset bundles position settings will not be changed.
* See [[registerJsFile]] for more details on javascript position.
* @return AssetBundle the registered asset bundle instance
* @throws InvalidConfigException if the asset bundle does not exist or a circular dependency is detected
*/
public function registerAssetBundle($name, $position = null)
{
if (!isset($this->assetBundles[$name])) {
$am = $this->getAssetManager();
$bundle = $am->getBundle($name);
$this->assetBundles[$name] = false;
// register dependencies
$pos = isset($bundle->jsOptions['position']) ? $bundle->jsOptions['position'] : null;
foreach ($bundle->depends as $dep) {
$this->registerAssetBundle($dep, $pos);
}
$this->assetBundles[$name] = $bundle;
} elseif ($this->assetBundles[$name] === false) {
throw new InvalidConfigException("A circular dependency is detected for bundle '$name'.");
} else {
$bundle = $this->assetBundles[$name];
}
if ($position !== null) {
$pos = isset($bundle->jsOptions['position']) ? $bundle->jsOptions['position'] : null;
if ($pos === null) {
$bundle->jsOptions['position'] = $pos = $position;
} elseif ($pos > $position) {
throw new InvalidConfigException("An asset bundle that depends on '$name' has a higher javascript file position configured than '$name'.");
}
// update position for all dependencies
foreach ($bundle->depends as $dep) {
$this->registerAssetBundle($dep, $pos);
}
}
return $bundle;
}
/**
* Registers a meta tag.
* @param array $options the HTML attributes for the meta tag.
* @param string $key the key that identifies the meta tag. If two meta tags are registered
* with the same key, the latter will overwrite the former. If this is null, the new meta tag
* will be appended to the existing ones.
*/
public function registerMetaTag($options, $key = null)
{
if ($key === null) {
$this->metaTags[] = Html::tag('meta', '', $options);
} else {
$this->metaTags[$key] = Html::tag('meta', '', $options);
}
}
/**
* Registers a link tag.
* @param array $options the HTML attributes for the link tag.
* @param string $key the key that identifies the link tag. If two link tags are registered
* with the same key, the latter will overwrite the former. If this is null, the new link tag
* will be appended to the existing ones.
*/
public function registerLinkTag($options, $key = null)
{
if ($key === null) {
$this->linkTags[] = Html::tag('link', '', $options);
} else {
$this->linkTags[$key] = Html::tag('link', '', $options);
}
}
/**
* Registers a CSS code block.
* @param string $css the CSS code block to be registered
* @param array $options the HTML attributes for the style tag.
* @param string $key the key that identifies the CSS code block. If null, it will use
* $css as the key. If two CSS code blocks are registered with the same key, the latter
* will overwrite the former.
*/
public function registerCss($css, $options = [], $key = null)
{
$key = $key ?: md5($css);
$this->css[$key] = Html::style($css, $options);
}
/**
* Registers a CSS file.
* @param string $url the CSS file to be registered.
* @param array $options the HTML attributes for the link tag.
* @param string $key the key that identifies the CSS script file. If null, it will use
* $url as the key. If two CSS files are registered with the same key, the latter
* will overwrite the former.
*/
public function registerCssFile($url, $options = [], $key = null)
{
$key = $key ?: $url;
$this->cssFiles[$key] = Html::cssFile($url, $options);
}
/**
* Registers a JS code block.
* @param string $js the JS code block to be registered
* @param integer $position the position at which the JS script tag should be inserted
* in a page. The possible values are:
*
* - [[POS_HEAD]]: in the head section
* - [[POS_BEGIN]]: at the beginning of the body section
* - [[POS_END]]: at the end of the body section
* - [[POS_READY]]: enclosed within jQuery(document).ready(). This is the default value.
* Note that by using this position, the method will automatically register the jQuery js file.
*
* @param string $key the key that identifies the JS code block. If null, it will use
* $js as the key. If two JS code blocks are registered with the same key, the latter
* will overwrite the former.
*/
public function registerJs($js, $position = self::POS_READY, $key = null)
{
$key = $key ?: md5($js);
$this->js[$position][$key] = $js;
if ($position === self::POS_READY) {
JqueryAsset::register($this);
}
}
/**
* Registers a JS file.
* Please note that when this file depends on other JS files to be registered before,
* for example jQuery, you should use [[registerAssetBundle]] instead.
* @param string $url the JS file to be registered.
* @param array $options the HTML attributes for the script tag. A special option
* named "position" is supported which specifies where the JS script tag should be inserted
* in a page. The possible values of "position" are:
*
* - [[POS_HEAD]]: in the head section
* - [[POS_BEGIN]]: at the beginning of the body section
* - [[POS_END]]: at the end of the body section. This is the default value.
*
* @param string $key the key that identifies the JS script file. If null, it will use
* $url as the key. If two JS files are registered with the same key, the latter
* will overwrite the former.
*/
public function registerJsFile($url, $options = [], $key = null)
{
$position = isset($options['position']) ? $options['position'] : self::POS_END;
unset($options['position']);
$key = $key ?: $url;
$this->jsFiles[$position][$key] = Html::jsFile($url, $options);
}
/**
* Renders the content to be inserted in the head section.
* The content is rendered using the registered meta tags, link tags, CSS/JS code blocks and files.
* @return string the rendered content
*/
protected function renderHeadHtml()
{
$lines = [];
if (!empty($this->metaTags)) {
$lines[] = implode("\n", $this->metaTags);
}
$request = Yii::$app->getRequest();
if ($request instanceof \yii\web\Request && $request->enableCsrfValidation) {
$lines[] = Html::tag('meta', '', ['name' => 'csrf-var', 'content' => $request->csrfVar]);
$lines[] = Html::tag('meta', '', ['name' => 'csrf-token', 'content' => $request->getCsrfToken()]);
}
if (!empty($this->linkTags)) {
$lines[] = implode("\n", $this->linkTags);
}
if (!empty($this->cssFiles)) {
$lines[] = implode("\n", $this->cssFiles);
}
if (!empty($this->css)) {
$lines[] = implode("\n", $this->css);
}
if (!empty($this->jsFiles[self::POS_HEAD])) {
$lines[] = implode("\n", $this->jsFiles[self::POS_HEAD]);
}
if (!empty($this->js[self::POS_HEAD])) {
$lines[] = Html::script(implode("\n", $this->js[self::POS_HEAD]), ['type' => 'text/javascript']);
}
return empty($lines) ? '' : implode("\n", $lines);
}
/**
* Renders the content to be inserted at the beginning of the body section.
* The content is rendered using the registered JS code blocks and files.
* @return string the rendered content
*/
protected function renderBodyBeginHtml()
{
$lines = [];
if (!empty($this->jsFiles[self::POS_BEGIN])) {
$lines[] = implode("\n", $this->jsFiles[self::POS_BEGIN]);
}
if (!empty($this->js[self::POS_BEGIN])) {
$lines[] = Html::script(implode("\n", $this->js[self::POS_BEGIN]), ['type' => 'text/javascript']);
}
return empty($lines) ? '' : implode("\n", $lines);
}
/**
* Renders the content to be inserted at the end of the body section.
* The content is rendered using the registered JS code blocks and files.
* @return string the rendered content
*/
protected function renderBodyEndHtml()
{
$lines = [];
if (!empty($this->jsFiles[self::POS_END])) {
$lines[] = implode("\n", $this->jsFiles[self::POS_END]);
}
if (!empty($this->js[self::POS_END])) {
$lines[] = Html::script(implode("\n", $this->js[self::POS_END]), ['type' => 'text/javascript']);
}
if (!empty($this->js[self::POS_READY])) {
$js = "jQuery(document).ready(function(){\n" . implode("\n", $this->js[self::POS_READY]) . "\n});";
$lines[] = Html::script($js, ['type' => 'text/javascript']);
}
return empty($lines) ? '' : implode("\n", $lines);
}
}

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

@ -1,6 +1,6 @@
<?php <?php
/** /**
* @var $this \yii\base\View * @var $this \yii\web\View
* @var $content string * @var $content string
*/ */
?> ?>

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

@ -1,5 +1,5 @@
<?php <?php
/** /**
* @var $this \yii\base\View * @var $this \yii\web\View
*/ */
?><?php $this->beginPage(); ?>1<?php $this->head(); ?>2<?php $this->beginBody(); ?>3<?php $this->endBody(); ?>4<?php $this->endPage(); ?> ?><?php $this->beginPage(); ?>1<?php $this->head(); ?>2<?php $this->beginBody(); ?>3<?php $this->endBody(); ?>4<?php $this->endPage(); ?>

2
tests/unit/framework/web/AssetBundleTest.php

@ -8,7 +8,7 @@
namespace yiiunit\framework\web; namespace yiiunit\framework\web;
use Yii; use Yii;
use yii\base\View; use yii\web\View;
use yii\web\AssetBundle; use yii\web\AssetBundle;
use yii\web\AssetManager; use yii\web\AssetManager;

Loading…
Cancel
Save