Commit 927e9ddd by Alexander Makarov

Refactored View

parent 74620754
...@@ -6,7 +6,7 @@ use yii\bootstrap\NavBar; ...@@ -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);
......
...@@ -3,7 +3,7 @@ ...@@ -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
......
<?php <?php
/** /**
* @var yii\base\View $this * @var yii\web\View $this
*/ */
$this->title = 'My Yii Application'; $this->title = 'My Yii Application';
?> ?>
......
...@@ -3,7 +3,7 @@ use yii\helpers\Html; ...@@ -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,7 +2,7 @@ ...@@ -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;
*/ */
......
...@@ -7,7 +7,7 @@ use yii\widgets\Breadcrumbs; ...@@ -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,7 +2,7 @@ ...@@ -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;
......
...@@ -4,7 +4,7 @@ use yii\widgets\ActiveForm; ...@@ -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
*/ */
......
...@@ -3,7 +3,7 @@ ...@@ -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
......
<?php <?php
/** /**
* @var yii\base\View $this * @var yii\web\View $this
*/ */
$this->title = 'My Yii Application'; $this->title = 'My Yii Application';
?> ?>
......
...@@ -3,7 +3,7 @@ use yii\helpers\Html; ...@@ -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
*/ */
......
...@@ -3,7 +3,7 @@ use yii\helpers\Html; ...@@ -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
*/ */
......
...@@ -3,7 +3,7 @@ use yii\helpers\Html; ...@@ -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
*/ */
......
...@@ -3,7 +3,7 @@ use yii\helpers\Html; ...@@ -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
*/ */
......
...@@ -5,7 +5,7 @@ use yii\bootstrap\NavBar; ...@@ -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,7 +2,7 @@ ...@@ -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;
......
...@@ -4,7 +4,7 @@ use yii\widgets\ActiveForm; ...@@ -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
*/ */
......
...@@ -3,7 +3,7 @@ ...@@ -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
......
<?php <?php
/** /**
* @var yii\base\View $this * @var yii\web\View $this
*/ */
$this->title = 'My Yii Application'; $this->title = 'My Yii Application';
?> ?>
......
...@@ -3,7 +3,7 @@ use yii\helpers\Html; ...@@ -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
*/ */
......
...@@ -10,7 +10,7 @@ a custom template engines by reconfiguring this component's behavior: ...@@ -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',
......
...@@ -113,7 +113,7 @@ to learn more refer to [Using template engines](template.md) section of the guid ...@@ -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 ...@@ -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 [
......
...@@ -9,7 +9,7 @@ namespace yii\debug; ...@@ -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;
/** /**
......
...@@ -3,7 +3,7 @@ ...@@ -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
*/ */
......
<?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
*/ */
......
...@@ -5,7 +5,7 @@ use yii\bootstrap\ButtonGroup; ...@@ -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
......
<?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;
......
...@@ -11,7 +11,7 @@ use Yii; ...@@ -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;
/** /**
......
<?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
*/ */
......
...@@ -5,7 +5,7 @@ use yii\helpers\Inflector; ...@@ -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
*/ */
......
...@@ -2,7 +2,7 @@ ...@@ -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 @@ ...@@ -10,7 +10,7 @@
echo "<?php\n"; echo "<?php\n";
?> ?>
/** /**
* @var yii\base\View $this * @var yii\web\View $this
*/ */
<?= "?>" ?> <?= "?>" ?>
......
<?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
*/ */
......
...@@ -5,7 +5,7 @@ use yii\helpers\StringHelper; ...@@ -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
*/ */
......
...@@ -5,7 +5,7 @@ use yii\helpers\StringHelper; ...@@ -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,7 +4,7 @@ use yii\helpers\Inflector; ...@@ -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; ...@@ -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,7 +4,7 @@ use yii\helpers\Inflector; ...@@ -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; ...@@ -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,7 +4,7 @@ use yii\helpers\Inflector; ...@@ -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"; ...@@ -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,7 +4,7 @@ use yii\helpers\Inflector; ...@@ -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; ...@@ -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,7 +4,7 @@ use yii\helpers\Inflector; ...@@ -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"; ...@@ -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,7 +4,7 @@ use yii\helpers\Inflector; ...@@ -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; ...@@ -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
*/ */
......
<?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
*/ */
......
...@@ -5,7 +5,7 @@ use yii\helpers\Inflector; ...@@ -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
*/ */
......
...@@ -2,7 +2,7 @@ ...@@ -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; ...@@ -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
*/ */
......
<?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,7 +2,7 @@ ...@@ -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
......
<?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,7 +2,7 @@ ...@@ -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,7 +2,7 @@ ...@@ -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;
......
<?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
*/ */
?> ?>
......
<?php <?php
/** /**
* @var yii\base\View $this * @var yii\web\View $this
* @var mixed $diff * @var mixed $diff
*/ */
?> ?>
......
...@@ -2,7 +2,7 @@ ...@@ -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
......
...@@ -6,7 +6,7 @@ use yii\gii\components\ActiveField; ...@@ -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
......
...@@ -4,7 +4,7 @@ use yii\helpers\Html; ...@@ -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
......
<?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,7 +2,7 @@ ...@@ -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
......
...@@ -4,7 +4,7 @@ use yii\bootstrap\Nav; ...@@ -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);
......
...@@ -471,7 +471,7 @@ abstract class Application extends Module ...@@ -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'],
]); ]);
} }
......
...@@ -9,9 +9,6 @@ namespace yii\base; ...@@ -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; ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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);
} }
} }
...@@ -96,7 +96,7 @@ class CaptchaValidator extends Validator ...@@ -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.
*/ */
......
...@@ -213,6 +213,7 @@ return [ ...@@ -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',
......
...@@ -79,7 +79,7 @@ class BooleanValidator extends Validator ...@@ -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.
*/ */
......
...@@ -179,7 +179,7 @@ class CompareValidator extends Validator ...@@ -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
*/ */
......
...@@ -119,7 +119,7 @@ class EmailValidator extends Validator ...@@ -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.
*/ */
......
...@@ -79,7 +79,7 @@ class InlineValidator extends Validator ...@@ -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.
......
...@@ -114,7 +114,7 @@ class NumberValidator extends Validator ...@@ -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.
*/ */
......
...@@ -81,7 +81,7 @@ class RangeValidator extends Validator ...@@ -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.
*/ */
......
...@@ -78,7 +78,7 @@ class RegularExpressionValidator extends Validator ...@@ -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.
*/ */
......
...@@ -102,7 +102,7 @@ class RequiredValidator extends Validator ...@@ -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.
*/ */
......
...@@ -142,7 +142,7 @@ class StringValidator extends Validator ...@@ -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.
*/ */
......
...@@ -115,7 +115,7 @@ class UrlValidator extends Validator ...@@ -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
......
...@@ -215,7 +215,7 @@ abstract class Validator extends Component ...@@ -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.
......
...@@ -10,7 +10,7 @@ namespace yii\web; ...@@ -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 ...@@ -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 ...@@ -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)
{ {
......
<?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);
}
}
<?php <?php
/** /**
* @var $this \yii\base\View * @var $this \yii\web\View
* @var $content string * @var $content string
*/ */
?> ?>
......
<?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(); ?>
\ No newline at end of file
...@@ -8,7 +8,7 @@ ...@@ -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;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment