CBaseController
| Пакет | system.web |
|---|---|
| Наследование | абстрактный класс CBaseController » CComponent |
| Подклассы | CController, CWidget |
| С момента | 1.0 |
| Исходный код | framework/web/CBaseController.php |
Он предоставляет общие функциональные возможности для контроллеров, которым необходимо рендерить представления.
CBaseController также реализует поддержку следующих функций:
- Клипы : клип — это фрагмент полученного вывода, который можно вставить в другое место.
- Виджеты : виджет — это автономный подконтроллер со своим представлением и моделью.
- Кэширование фрагментов : кэширование фрагментов выборочно кэширует часть вывода.
Чтобы использовать виджет в представлении, используйте следующее в представлении:
$this->widget('path.to.widgetClass',array('property1'=>'value1',...));
или
$this->beginWidget('path.to.widgetClass',array('property1'=>'value1',...));
// ... display other contents here
$this->endWidget();
Для создания клипа используйте следующее:
$this->beginClip('clipID');
// ... display the clip contents
$this->endClip();
Затем в другом представлении или месте захваченный клип можно вставить как: echo $this->clips['clipID'];
Обратите внимание, что $this в приведенном выше коде относится к текущему контроллеру, поэтому, если вам нужно получить доступ к клипу из виджета, где $this относится к самому виджету, вам нужно сделать это следующим образом:
echo $this->getController()->clips['clipID'];
Чтобы использовать кэширование фрагментов, сделайте следующее:
if($this->beginCache('cacheID',array('property1'=>'value1',...))
{
// ... display the content to be cached here
$this->endCache();
}
Публичные методы
| Метод | Описание | Определено в |
|---|---|---|
| __call() | Вызывает метод по имени, который не является методом класса. | CComponent |
| __get() | Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. | CComponent |
| __isset() | Проверяет, является ли значение свойства null. | CComponent |
| __set() | Устанавливает значение свойства компонента. | CComponent |
| __unset() | Устанавливает свойство компонента в null. | CComponent |
| asa() | Возвращает объект поведения по имени. | CComponent |
| attachBehavior() | Присоединяет поведение к этому компоненту. | CComponent |
| attachBehaviors() | Присоединяет список поведений к компоненту. | CComponent |
| attachEventHandler() | Присоединяет обработчик событий к событию. | CComponent |
| beginCache() | Начинает кэширование фрагментов. | CBaseController |
| beginClip() | Начинает запись клипа. | CBaseController |
| beginContent() | Начинает рендеринг контента, который должен быть оформлен указанным представлением. | CBaseController |
| beginWidget() | Создает виджет и выполняет его. | CBaseController |
| canGetProperty() | Определяет, можно ли прочитать свойство. | CComponent |
| canSetProperty() | Определяет, можно ли установить свойство. | CComponent |
| createWidget() | Создает виджет и инициализирует его. | CBaseController |
| detachBehavior() | Отсоединяет поведение от компонента. | CComponent |
| detachBehaviors() | Отсоединяет все поведения от компонента. | CComponent |
| detachEventHandler() | Отсоединяет существующий обработчик событий. | CComponent |
| disableBehavior() | Отключает присоединённое поведение. | CComponent |
| disableBehaviors() | Отключает все присоединенные к этому компоненту поведения. | CComponent |
| enableBehavior() | Включает присоединенное поведение. | CComponent |
| enableBehaviors() | Включает все присоединенные к этому компоненту поведения. | CComponent |
| endCache() | Завершает кэширование фрагментов. | CBaseController |
| endClip() | Завершает запись клипа. | CBaseController |
| endContent() | Завершает рендеринг контента. | CBaseController |
| endWidget() | Завершает выполнение указанного виджета. | CBaseController |
| evaluateExpression() | Вычисляет PHP-выражение или обратный вызов в контексте этого компонента. | CComponent |
| getEventHandlers() | Возвращает список прикрепленных обработчиков событий для события. | CComponent |
| getViewFile() | Возвращает файл скрипта представления в соответствии с заданным именем представления. | CBaseController |
| hasEvent() | Определяет, определено ли событие. | CComponent |
| hasEventHandler() | Проверяет, есть ли у указанного события прикрепленные обработчики. | CComponent |
| hasProperty() | Определяет, определено ли свойство. | CComponent |
| raiseEvent() | Возбуждает событие. | CComponent |
| renderFile() | Рендерит файл представления. | CBaseController |
| renderInternal() | Рендерит файл представления. | CBaseController |
| widget() | Создает виджет и выполняет его. | CBaseController |
Подробное описание методов
beginCache() метод
public boolean beginCache(string $id, array $properties=array ( )) | ||
| $id | строка | уникальный идентификатор, определяющий фрагмент, который будет кэширован. |
| $properties | массив | начальные значения свойств для COutputCache. |
| {return} | логическое | нужно ли генерировать контент для кэширования. False, если кэшированная версия доступна. |
public function beginCache($id,$properties=array())
{
$properties['id']=$id;
$cache=$this->beginWidget('COutputCache',$properties);
if($cache->getIsContentCached())
{
$this->endCache();
return false;
}
else
return true;
}
Начинает кэширование фрагментов. Этот метод отобразит кэшированный контент, если он доступен. В противном случае он начнет кэширование и ожидает вызова endCache() для завершения кэширования и сохранения контента в кэше. Типичное использование кэширования фрагментов приведено ниже,
if($this->beginCache($id))
{
// ...generate content here
$this->endCache();
}
См. также
beginClip() метод
public void beginClip(string $id, array $properties=array ( )) | ||
| $id | строка | идентификатор клипа. |
| $properties | массив | начальные значения свойств для CClipWidget. |
public function beginClip($id,$properties=array())
{
$properties['id']=$id;
$this->beginWidget('CClipWidget',$properties);
}
Начинает запись клипа. Этот метод — сокращение для начала CClipWidget.
beginContent() метод
public void beginContent(mixed $view=NULL, array $data=array ( )) | ||
| $view | смешанный | имя представления, которое будет использоваться для оформления содержимого. Фактический сценарий представления разрешается с помощью getViewFile. Если этот параметр равен null (по умолчанию), будет использоваться шаблон по умолчанию в качестве представления для оформления. Обратите внимание, что если текущий контроллер не принадлежит ни к одному модулю, шаблон по умолчанию относится к шаблону по умолчанию приложения; если контроллер принадлежит модулю, шаблон по умолчанию относится к шаблону по умолчанию модуля. |
| $data | массив | переменные (имя=>значение), которые будут извлечены и сделаны доступными в представлении для оформления. |
public function beginContent($view=null,$data=array())
{
$this->beginWidget('CContentDecorator',array('view'=>$view, 'data'=>$data));
}
Начинает отрисовку содержимого, которое должно быть оформлено указанным представлением.
См. также
beginWidget() метод
public CWidget beginWidget(string $className, array $properties=array ( )) | ||
| $className | строка | имя класса виджета или класс в формате с точками (например, application.widgets.MyWidget) |
| $properties | массив | список начальных значений свойств виджета (Имя свойства => Значение свойства) |
| {возвращает} | CWidget | созданный виджет для запуска |
public function beginWidget($className,$properties=array())
{
$widget=$this->createWidget($className,$properties);
$this->_widgetStack[]=$widget;
return $widget;
}
Создает виджет и выполняет его. Этот метод похож на widget(), за исключением того, что он ожидает вызова endWidget() для завершения выполнения.
См. также
createWidget() метод
public CWidget createWidget(string $className, array $properties=array ( )) | ||
| $className | строка | имя класса (может быть в формате псевдонима пути) |
| $properties | массив | начальные значения свойств |
| {возвращает} | CWidget | полностью инициализированный экземпляр виджета. |
public function createWidget($className,$properties=array())
{
$widget=Yii::app()->getWidgetFactory()->createWidget($this,$className,$properties);
$widget->init();
return $widget;
}
Создаёт виджет и инициализирует его. Этот метод сначала создаёт указанный экземпляр виджета. Затем он настраивает свойства виджета с помощью заданных начальных значений. В конце он вызывает CWidget::init для инициализации виджета. Начиная с версии 1.1, если включён фабрика виджетов, этот метод будет использовать фабрику для создания виджета.
endCache() метод
public void endCache() |
public function endCache()
{
$this->endWidget('COutputCache');
}
Завершает кэширование фрагмента. Это псевдоним для endWidget.
См. также
endClip() метод
public void endClip() |
public function endClip()
{
$this->endWidget('CClipWidget');
}
Завершает запись клипа. Этот метод является алиасом для endWidget.
endContent() метод
public void endContent() |
public function endContent()
{
$this->endWidget('CContentDecorator');
}
Завершает отрисовку содержимого.
См. также
endWidget() метод
public CWidget endWidget(string $id='') | ||
| $id | строка | необязательный тег, идентифицирующий вызов метода для отладки. |
| {возвращает} | CWidget | виджет, который только что завершил работу |
public function endWidget($id='')
{
if(($widget=array_pop($this->_widgetStack))!==null)
{
$widget->run();
return $widget;
}
else
throw new CException(Yii::t('yii','{controller} has an extra endWidget({id}) call in its view.',
array('{controller}'=>get_class($this),'{id}'=>$id)));
}
Завершает выполнение указанного виджета. Этот метод используется вместе с beginWidget().
См. также
getViewFile() метод
abstract public string getViewFile(string $viewName) | ||
| $viewName | строка | имя представления |
| {возвращает} | строка | путь к файлу представления с указанным именем. Ложь, если представление не найдено. |
abstract public function getViewFile($viewName);
Возвращает файл сценария представления в соответствии с указанным именем представления. Этот метод должен быть реализован дочерними классами.
renderFile() метод
public string renderFile(string $viewFile, array $data=NULL, boolean $return=false) | ||
| $viewFile | строка | путь к файлу представления |
| $data | массив | данные, которые должны быть извлечены и доступны для представления |
| $return | булево | является ли результат отрисовки должен быть возвращен, а не выводиться |
| {возвращает} | строка | результат отрисовки. Null, если результат отрисовки не требуется. |
public function renderFile($viewFile,$data=null,$return=false)
{
$widgetCount=count($this->_widgetStack);
if(($renderer=Yii::app()->getViewRenderer())!==null && $renderer->fileExtension==='.'.CFileHelper::getExtension($viewFile))
$content=$renderer->renderFile($this,$viewFile,$data,$return);
else
$content=$this->renderInternal($viewFile,$data,$return);
if(count($this->_widgetStack)===$widgetCount)
return $content;
else
{
$widget=end($this->_widgetStack);
throw new CException(Yii::t('yii','{controller} contains improperly nested widget tags in its view "{view}". A {widget} widget does not have an endWidget() call.',
array('{controller}'=>get_class($this), '{view}'=>$viewFile, '{widget}'=>get_class($widget))));
}
}
Отображает файл представления.
renderInternal() метод
public string renderInternal(string $_viewFile_, array $_data_=NULL, boolean $_return_=false) | ||
| $_viewFile_ | строка | файл представления |
| $_data_ | массив | данные, которые должны быть извлечены и доступны для файла представления |
| $_return_ | булево | должен ли результат отрисовки возвращаться в виде строки |
| {возвращает} | строка | результат отрисовки. Null, если результат отрисовки не требуется. |
public function renderInternal($_viewFile_,$_data_=null,$_return_=false)
{
// we use special variable names here to avoid conflict when extracting data
if(is_array($_data_))
extract($_data_,EXTR_PREFIX_SAME,'data');
else
$data=$_data_;
if($_return_)
{
ob_start();
ob_implicit_flush(false);
require($_viewFile_);
return ob_get_clean();
}
else
require($_viewFile_);
}
Отображает файл представления. Этот метод включает файл представления как PHP-скрипт и получает результат отображения при необходимости.
widget() метод
public mixed widget(string $className, array $properties=array ( ), boolean $captureOutput=false) | ||
| $className | строка | имя класса виджета или класс в формате с точками (например, application.widgets.MyWidget) |
| $properties | массив | список начальных значений свойств виджета (Имя свойства => Значение свойства) |
| $captureOutput | булево | следует ли захватить вывод виджета. Если true, метод захватывает и возвращает вывод, сгенерированный виджетом. Если false, вывод будет отправлен для отображения непосредственно, а объект виджета будет возвращён. Этот параметр доступен с версии 1.1.2. |
| {возвращает} | смешанный | экземпляр виджета, когда $captureOutput равен false, или вывод виджета, когда $captureOutput равен true. |
public function widget($className,$properties=array(),$captureOutput=false)
{
if($captureOutput)
{
ob_start();
ob_implicit_flush(false);
try
{
$widget=$this->createWidget($className,$properties);
$widget->run();
}
catch(Exception $e)
{
ob_end_clean();
throw $e;
}
return ob_get_clean();
}
else
{
$widget=$this->createWidget($className,$properties);
$widget->run();
return $widget;
}
}
Создаёт виджет и выполняет его.
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CBaseController