0 追蹤者

類別 yii\rest\IndexAction

繼承關係yii\rest\IndexAction » yii\rest\Action » yii\base\Action » yii\base\Component » yii\base\BaseObject
實作yii\base\Configurable
自版本2.0
原始碼 https://github.com/yiisoft/yii2/blob/master/framework/rest/IndexAction.php

IndexAction 實作了列出多個模型的 API 端點。

關於 IndexAction 的更多細節和使用資訊,請參閱 rest 控制器的指南文章

公開屬性

隱藏繼承的屬性

屬性 類型 描述 定義於
$behaviors yii\base\Behavior[] 附加到此組件的行為列表。 yii\base\Component
$checkAccess callable|null 一個 PHP 可呼叫函數,將在執行動作時被呼叫,以判斷當前使用者是否具有執行該動作的權限。 yii\rest\Action
$controller yii\base\Controller|yii\web\Controller|yii\console\Controller 擁有此動作的控制器 yii\base\Action
$dataFilter yii\data\DataFilter|null 用於搜尋過濾器組成的資料過濾器。 yii\rest\IndexAction
$findModel callable|null 一個 PHP 可呼叫函數,將被呼叫以傳回與指定主鍵值相對應的模型。 yii\rest\Action
$id string 動作的 ID yii\base\Action
$modelClass string 將由此動作處理的模型的類別名稱。 yii\rest\Action
$pagination array|yii\data\Pagination|false 將由 prepareDataProvider() 使用的分頁。 yii\rest\IndexAction
$prepareDataProvider callable|null 一個 PHP 可呼叫函數,將被呼叫以準備一個資料提供器,該提供器應傳回模型的集合。 yii\rest\IndexAction
$prepareSearchQuery callable 一個 PHP 可呼叫函數,將被呼叫以在 prepareDataProvider 中準備查詢。 yii\rest\IndexAction
$sort array|yii\data\Sort|false 將由 prepareDataProvider() 使用的排序。 yii\rest\IndexAction
$uniqueId string 此動作在整個應用程式中的唯一 ID。 yii\base\Action

公開方法

隱藏繼承的方法

方法 描述 定義於
__call() 呼叫非類別方法的具名方法。 yii\base\Component
__clone() 在透過複製現有物件建立物件後,會呼叫此方法。 yii\base\Component
__construct() 建構子。 yii\base\Action
__get() 傳回組件屬性的值。 yii\base\Component
__isset() 檢查屬性是否已設定,即已定義且非 null。 yii\base\Component
__set() 設定組件屬性的值。 yii\base\Component
__unset() 將組件屬性設定為 null。 yii\base\Component
attachBehavior() 將行為附加到此組件。 yii\base\Component
attachBehaviors() 將行為列表附加到組件。 yii\base\Component
behaviors() 傳回此組件應表現為的行為列表。 yii\base\Component
canGetProperty() 傳回一個值,指示是否可以讀取屬性。 yii\base\Component
canSetProperty() 傳回一個值,指示是否可以設定屬性。 yii\base\Component
className() 傳回此類別的完整限定名稱。 yii\base\BaseObject
detachBehavior() 從組件分離行為。 yii\base\Component
detachBehaviors() 從組件分離所有行為。 yii\base\Component
ensureBehaviors() 確保在 behaviors() 中宣告的行為已附加到此組件。 yii\base\Component
findModel() 根據給定的主鍵傳回資料模型。 yii\rest\Action
getBehavior() 傳回具名的行為物件。 yii\base\Component
getBehaviors() 傳回附加到此組件的所有行為。 yii\base\Component
getUniqueId() 傳回此動作在整個應用程式中的唯一 ID。 yii\base\Action
hasEventHandlers() 傳回一個值,指示是否有名稱事件附加任何處理常式。 yii\base\Component
hasMethod() 傳回一個值,指示是否已定義方法。 yii\base\Component
hasProperty() 傳回一個值,指示是否為此組件定義了屬性。 yii\base\Component
init() 初始化物件。 yii\rest\Action
off() 從此組件分離現有的事件處理常式。 yii\base\Component
on() 將事件處理常式附加到事件。 yii\base\Component
run() yii\rest\IndexAction
runWithParams() 使用指定的參數執行此動作。 yii\base\Action
trigger() 觸發一個事件。 yii\base\Component

受保護的方法

隱藏繼承的方法

方法 描述 定義於
afterRun() 這個方法會在 run() 執行完成後立即被呼叫。 yii\base\Action
beforeRun() 這個方法會在 run() 執行前立即被呼叫。 yii\base\Action
prepareDataProvider() 準備資料提供者,此提供者應回傳所請求的模型集合。 yii\rest\IndexAction

屬性詳情

隱藏繼承的屬性

$dataFilter 公有屬性 (自版本 2.0.13 起可用)

資料篩選器,用於搜尋篩選條件的組成。您必須明確設定此欄位才能啟用篩選處理。例如

[
    'class' => 'yii\data\ActiveDataFilter',
    'searchModel' => function () {
        return (new \yii\base\DynamicModel(['id' => null, 'name' => null, 'price' => null]))
            ->addRule('id', 'integer')
            ->addRule('name', 'trim')
            ->addRule('name', 'string')
            ->addRule('price', 'number');
    },
]

另請參閱 yii\data\DataFilter

$pagination 公有屬性 (自版本 2.0.45 起可用)

`prepareDataProvider()` 將使用的分頁設定。如果此值為 false,則表示分頁功能已停用。注意:如果傳遞的是 Pagination 物件,則其 params 將會設定為請求參數。

另請參閱 yii\data\Pagination

$prepareDataProvider 公有屬性

一個 PHP 可呼叫 (callable) 物件,將被呼叫以準備一個資料提供者,此提供者應回傳模型集合。如果未設定,則會改用 prepareDataProvider()。此可呼叫物件的簽名應為

function (IndexAction $action) {
    // $action is the action object currently running
}

此可呼叫物件應回傳 yii\data\ActiveDataProvider 的實例。

如果設定了 $dataFilter,則 yii\data\DataFilter::build() 的結果將作為第二個參數傳遞給此可呼叫物件。在這種情況下,此可呼叫物件的簽名應為以下形式

function (IndexAction $action, mixed $filter) {
    // $action is the action object currently running
    // $filter the built filter condition
}
$prepareSearchQuery 公有屬性 (自版本 2.0.42 起可用)

一個 PHP 可呼叫 (callable) 物件,將被呼叫以在 prepareDataProvider 中準備查詢。應回傳 $query。例如

function ($query, $requestParams) {
    $query->andFilterWhere(['id' => 1]);
    ...
    return $query;
}
$sort 公有屬性 (自版本 2.0.45 起可用)

`prepareDataProvider()` 將使用的排序設定。如果此值為 false,則表示排序功能已停用。注意:如果傳遞的是 Sort 物件,則其 params 將會設定為請求參數。

另請參閱 yii\data\Sort

方法詳情

隱藏繼承的方法

__call() 公有方法

定義於: yii\base\Component::__call()

呼叫非類別方法的具名方法。

這個方法會檢查是否有任何附加的行為 (behavior) 具有指定的名稱方法,如果有,則會執行它。

請勿直接呼叫此方法,因為它是一個 PHP 魔術方法,當調用未知方法時,它會被隱式地呼叫。

public mixed __call ( $name, $params )
$name string

方法名稱

$params array

方法參數

return mixed

方法回傳值

throws yii\base\UnknownMethodException

當呼叫未知方法時

                public function __call($name, $params)
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $object) {
        if ($object->hasMethod($name)) {
            return call_user_func_array([$object, $name], $params);
        }
    }
    throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}

            
__clone() 公有方法

定義於: yii\base\Component::__clone()

在透過複製現有物件建立物件後,會呼叫此方法。

它會移除所有行為 (behavior),因為這些行為是附加到舊物件上的。

public void __clone ( )

                public function __clone()
{
    $this->_events = [];
    $this->_eventWildcards = [];
    $this->_behaviors = null;
}

            
__construct() 公有方法

定義於: yii\base\Action::__construct()

建構子。

public void __construct ( $id, $controller, $config = [] )
$id string

此 Action 的 ID

$controller yii\base\Controller

擁有此動作的控制器

$config array

名稱-值 組,將用於初始化物件屬性

                public function __construct($id, $controller, $config = [])
{
    $this->id = $id;
    $this->controller = $controller;
    parent::__construct($config);
}

            
__get() 公有方法

定義於: yii\base\Component::__get()

傳回組件屬性的值。

這個方法將按照以下順序檢查並採取相應的動作

  • 由 getter 定義的屬性:回傳 getter 結果
  • 行為 (behavior) 的屬性:回傳行為屬性值

請勿直接呼叫此方法,因為它是一個 PHP 魔術方法,當執行 $value = $component->property; 時,它會被隱式地呼叫。

另請參閱 __set()

public mixed __get ( $name )
$name string

屬性名稱

return mixed

屬性值或行為 (behavior) 屬性的值

throws yii\base\UnknownPropertyException

如果屬性未定義

throws yii\base\InvalidCallException

如果屬性為唯寫。

                public function __get($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        // read property, e.g. getName()
        return $this->$getter();
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name;
        }
    }
    if (method_exists($this, 'set' . $name)) {
        throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}

            
__isset() 公有方法

定義於: yii\base\Component::__isset()

檢查屬性是否已設定,即已定義且非 null。

這個方法將按照以下順序檢查並採取相應的動作

  • 由 setter 定義的屬性:回傳屬性是否已設定
  • 行為 (behavior) 的屬性:回傳屬性是否已設定
  • 對於不存在的屬性,回傳 false

請勿直接呼叫此方法,因為它是一個 PHP 魔術方法,當執行 isset($component->property) 時,它會被隱式地呼叫。

另請參閱 https://php.dev.org.tw/manual/en/function.isset.php

public boolean __isset ( $name )
$name string

屬性名稱或事件名稱

return boolean

指示具名屬性是否已設定

                public function __isset($name)
{
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
        return $this->$getter() !== null;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canGetProperty($name)) {
            return $behavior->$name !== null;
        }
    }
    return false;
}

            
__set() 公有方法

定義於: yii\base\Component::__set()

設定組件屬性的值。

這個方法將按照以下順序檢查並採取相應的動作

  • 由 setter 定義的屬性:設定屬性值
  • 格式為 "on xyz" 的事件:將處理器附加到事件 "xyz"
  • 格式為 "as xyz" 的行為 (behavior):附加名為 "xyz" 的行為
  • 行為 (behavior) 的屬性:設定行為屬性值

請勿直接呼叫此方法,因為它是一個 PHP 魔術方法,當執行 $component->property = $value; 時,它會被隱式地呼叫。

另請參閱 __get()

public void __set ( $name, $value )
$name string

屬性名稱或事件名稱

$value mixed

屬性值

throws yii\base\UnknownPropertyException

如果屬性未定義

throws yii\base\InvalidCallException

如果屬性為唯讀。

                public function __set($name, $value)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        // set property
        $this->$setter($value);
        return;
    } elseif (strncmp($name, 'on ', 3) === 0) {
        // on event: attach event handler
        $this->on(trim(substr($name, 3)), $value);
        return;
    } elseif (strncmp($name, 'as ', 3) === 0) {
        // as behavior: attach behavior
        $name = trim(substr($name, 3));
        $this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value));
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = $value;
            return;
        }
    }
    if (method_exists($this, 'get' . $name)) {
        throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
    }
    throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}

            
__unset() 公有方法

定義於: yii\base\Component::__unset()

將組件屬性設定為 null。

這個方法將按照以下順序檢查並採取相應的動作

  • 由 setter 定義的屬性:將屬性值設定為 null
  • 行為 (behavior) 的屬性:將屬性值設定為 null

請勿直接呼叫此方法,因為它是一個 PHP 魔術方法,當執行 unset($component->property) 時,它會被隱式地呼叫。

另請參閱 https://php.dev.org.tw/manual/en/function.unset.php

public void __unset ( $name )
$name string

屬性名稱

throws yii\base\InvalidCallException

如果屬性為唯讀。

                public function __unset($name)
{
    $setter = 'set' . $name;
    if (method_exists($this, $setter)) {
        $this->$setter(null);
        return;
    }
    // behavior property
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $behavior) {
        if ($behavior->canSetProperty($name)) {
            $behavior->$name = null;
            return;
        }
    }
    throw new InvalidCallException('Unsetting an unknown or read-only property: ' . get_class($this) . '::' . $name);
}

            
afterRun() 受保護的方法

定義於: yii\base\Action::afterRun()

這個方法會在 run() 執行完成後立即被呼叫。

您可以覆寫此方法,為 action 執行完成後進行後處理工作。

protected void afterRun ( )

                protected function afterRun()
{
}

            
attachBehavior() 公有方法

定義於: yii\base\Component::attachBehavior()

將行為附加到此組件。

這個方法會根據給定的配置建立行為 (behavior) 物件。之後,將透過呼叫 yii\base\Behavior::attach() 方法將行為物件附加到此組件。

另請參閱 detachBehavior()

public yii\base\Behavior attachBehavior ( $name, $behavior )
$name string

行為 (behavior) 的名稱。

$behavior string|array|yii\base\Behavior

行為 (behavior) 配置。這可以是以下其中之一

return yii\base\Behavior

行為 (behavior) 物件

                public function attachBehavior($name, $behavior)
{
    $this->ensureBehaviors();
    return $this->attachBehaviorInternal($name, $behavior);
}

            
attachBehaviors() 公有方法

定義於: yii\base\Component::attachBehaviors()

將行為列表附加到組件。

每個行為 (behavior) 都以其名稱索引,並且應為 yii\base\Behavior 物件、指定行為類別的字串,或是用於建立行為的配置陣列。

另請參閱 attachBehavior()

public void attachBehaviors ( $behaviors )
$behaviors array

要附加到組件的行為 (behavior) 列表

                public function attachBehaviors($behaviors)
{
    $this->ensureBehaviors();
    foreach ($behaviors as $name => $behavior) {
        $this->attachBehaviorInternal($name, $behavior);
    }
}

            
beforeRun() 受保護的方法

定義於: yii\base\Action::beforeRun()

這個方法會在 run() 執行前立即被呼叫。

您可以覆寫此方法,為 action 執行前進行準備工作。如果此方法回傳 false,將會取消 action。

protected boolean beforeRun ( )
return boolean

指示是否執行 action。

                protected function beforeRun()
{
    return true;
}

            
behaviors() 公有方法

定義於: yii\base\Component::behaviors()

傳回此組件應表現為的行為列表。

子類別可以覆寫此方法,以指定它們想要表現為哪些行為 (behavior)。

此方法的回傳值應為行為 (behavior) 物件或配置的陣列,並以行為名稱索引。行為配置可以是指定行為類別的字串,或具有以下結構的陣列

'behaviorName' => [
    'class' => 'BehaviorClass',
    'property1' => 'value1',
    'property2' => 'value2',
]

請注意,行為 (behavior) 類別必須繼承自 yii\base\Behavior。行為可以使用名稱或匿名方式附加。當使用名稱作為陣列鍵時,可以使用此名稱,稍後使用 getBehavior() 檢索行為,或使用 detachBehavior() 分離行為。匿名行為無法被檢索或分離。

在此方法中宣告的行為 (behavior) 將會自動 (依需求) 附加到組件。

public array behaviors ( )
return array

行為 (behavior) 配置。

                public function behaviors()
{
    return [];
}

            
canGetProperty() 公有方法

定義於: yii\base\Component::canGetProperty()

傳回一個值,指示是否可以讀取屬性。

如果符合以下條件,則屬性可以被讀取

  • 類別具有與指定名稱相關聯的 getter 方法 (在這種情況下,屬性名稱不區分大小寫);
  • 類別具有具有指定名稱的成員變數 (當 $checkVars 為 true 時);
  • 附加的行為 (behavior) 具有給定名稱的可讀屬性 (當 $checkBehaviors 為 true 時)。

另請參閱 canSetProperty()

public boolean canGetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

屬性名稱

$checkVars boolean

指示是否將成員變數視為屬性

$checkBehaviors boolean

指示是否將行為 (behavior) 的屬性視為此組件的屬性

return boolean

指示屬性是否可以被讀取

                public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canGetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
canSetProperty() 公有方法

定義於: yii\base\Component::canSetProperty()

傳回一個值,指示是否可以設定屬性。

如果符合以下條件,則屬性可以被寫入

  • 類別具有與指定名稱相關聯的 setter 方法 (在這種情況下,屬性名稱不區分大小寫);
  • 類別具有具有指定名稱的成員變數 (當 $checkVars 為 true 時);
  • 附加的行為 (behavior) 具有給定名稱的可寫屬性 (當 $checkBehaviors 為 true 時)。

另請參閱 canGetProperty()

public boolean canSetProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

屬性名稱

$checkVars boolean

指示是否將成員變數視為屬性

$checkBehaviors boolean

指示是否將行為 (behavior) 的屬性視為此組件的屬性

return boolean

指示屬性是否可以被寫入

                public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
    if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->canSetProperty($name, $checkVars)) {
                return true;
            }
        }
    }
    return false;
}

            
className() 公有靜態方法
自 2.0.14 版本起已棄用。在 PHP >= 5.5 上,請改用 ::class

定義於: yii\base\BaseObject::className()

傳回此類別的完整限定名稱。

public static string className ( )
return string

此類別的完整限定名稱。

                public static function className()
{
    return get_called_class();
}

            
detachBehavior() 公有方法

定義於: yii\base\Component::detachBehavior()

從組件分離行為。

將會調用行為 (behavior) 的 yii\base\Behavior::detach() 方法。

public yii\base\Behavior|null detachBehavior ( $name )
$name string

行為 (behavior) 的名稱。

return yii\base\Behavior|null

已分離的行為 (behavior)。如果行為不存在,則為 Null。

                public function detachBehavior($name)
{
    $this->ensureBehaviors();
    if (isset($this->_behaviors[$name])) {
        $behavior = $this->_behaviors[$name];
        unset($this->_behaviors[$name]);
        $behavior->detach();
        return $behavior;
    }
    return null;
}

            
detachBehaviors() 公有方法

定義於: yii\base\Component::detachBehaviors()

從組件分離所有行為。

public void detachBehaviors ( )

                public function detachBehaviors()
{
    $this->ensureBehaviors();
    foreach ($this->_behaviors as $name => $behavior) {
        $this->detachBehavior($name);
    }
}

            
ensureBehaviors() 公有方法

定義於: yii\base\Component::ensureBehaviors()

確保在 behaviors() 中宣告的行為已附加到此組件。

public void ensureBehaviors ( )

                public function ensureBehaviors()
{
    if ($this->_behaviors === null) {
        $this->_behaviors = [];
        foreach ($this->behaviors() as $name => $behavior) {
            $this->attachBehaviorInternal($name, $behavior);
        }
    }
}

            
findModel() 公有方法

定義於: yii\rest\Action::findModel()

根據給定的主鍵傳回資料模型。

如果找不到資料模型,將會拋出 404 HTTP 例外。

public yii\db\ActiveRecordInterface findModel ( $id )
$id string

要載入的模型 ID。如果模型具有複合主鍵,則 ID 必須是由逗號分隔的主鍵值字串。主鍵值的順序應遵循模型 primaryKey() 方法回傳的順序。

return yii\db\ActiveRecordInterface

找到的模型

throws yii\web\NotFoundHttpException

如果找不到模型

                public function findModel($id)
{
    if ($this->findModel !== null) {
        return call_user_func($this->findModel, $id, $this);
    }
    /* @var $modelClass ActiveRecordInterface */
    $modelClass = $this->modelClass;
    $keys = $modelClass::primaryKey();
    if (count($keys) > 1) {
        $values = explode(',', $id);
        if (count($keys) === count($values)) {
            $model = $modelClass::findOne(array_combine($keys, $values));
        }
    } elseif ($id !== null) {
        $model = $modelClass::findOne($id);
    }
    if (isset($model)) {
        return $model;
    }
    throw new NotFoundHttpException("Object not found: $id");
}

            
getBehavior() 公有方法

定義於: yii\base\Component::getBehavior()

傳回具名的行為物件。

public yii\base\Behavior|null getBehavior ( $name )
$name string

行為 (behavior) 名稱

return yii\base\Behavior|null

行為 (behavior) 物件,如果行為不存在,則為 null

                public function getBehavior($name)
{
    $this->ensureBehaviors();
    return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}

            
getBehaviors() 公有方法

定義於: yii\base\Component::getBehaviors()

傳回附加到此組件的所有行為。

public yii\base\Behavior[] getBehaviors ( )
return yii\base\Behavior[]

附加到此組件的行為 (behavior) 列表

                public function getBehaviors()
{
    $this->ensureBehaviors();
    return $this->_behaviors;
}

            
getUniqueId() 公有方法

定義於: yii\base\Action::getUniqueId()

傳回此動作在整個應用程式中的唯一 ID。

public string getUniqueId ( )
return string

此動作在整個應用程式中的唯一 ID。

                public function getUniqueId()
{
    return $this->controller->getUniqueId() . '/' . $this->id;
}

            
hasEventHandlers() 公有方法

定義於: yii\base\Component::hasEventHandlers()

傳回一個值,指示是否有名稱事件附加任何處理常式。

public boolean hasEventHandlers ( $name )
$name string

事件名稱

return boolean

指示是否有任何處理器附加到事件。

                public function hasEventHandlers($name)
{
    $this->ensureBehaviors();
    if (!empty($this->_events[$name])) {
        return true;
    }
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
            return true;
        }
    }
    return Event::hasHandlers($this, $name);
}

            
hasMethod() 公有方法

定義於: yii\base\Component::hasMethod()

傳回一個值,指示是否已定義方法。

如果符合以下條件,則方法被定義

  • 類別具有具有指定名稱的方法
  • 附加的行為 (behavior) 具有給定名稱的方法 (當 $checkBehaviors 為 true 時)。
public boolean hasMethod ( $name, $checkBehaviors true )
$name string

屬性名稱

$checkBehaviors boolean

指示是否將行為 (behavior) 的方法視為此組件的方法

return boolean

指示方法是否已定義

                public function hasMethod($name, $checkBehaviors = true)
{
    if (method_exists($this, $name)) {
        return true;
    } elseif ($checkBehaviors) {
        $this->ensureBehaviors();
        foreach ($this->_behaviors as $behavior) {
            if ($behavior->hasMethod($name)) {
                return true;
            }
        }
    }
    return false;
}

            
hasProperty() 公有方法

定義於: yii\base\Component::hasProperty()

傳回一個值,指示是否為此組件定義了屬性。

如果符合以下條件,則屬性被定義

  • 類別具有與指定名稱相關聯的 getter 或 setter 方法 (在此情況下,屬性名稱不區分大小寫);
  • 類別具有具有指定名稱的成員變數 (當 $checkVars 為 true 時);
  • 附加行為具有給定名稱的屬性 (當 $checkBehaviors 為 true 時)。

另請參閱

public boolean hasProperty ( $name, $checkVars true, $checkBehaviors true )
$name string

屬性名稱

$checkVars boolean

指示是否將成員變數視為屬性

$checkBehaviors boolean

指示是否將行為 (behavior) 的屬性視為此組件的屬性

return boolean

屬性是否已定義

                public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
{
    return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
}

            
init() public method

定義於: yii\rest\Action::init()

初始化物件。

此方法在建構函式結束時調用,在物件使用給定的組態初始化之後。

public void init ( )

                public function init()
{
    if ($this->modelClass === null) {
        throw new InvalidConfigException(get_class($this) . '::$modelClass must be set.');
    }
}

            
off() public method

定義於: yii\base\Component::off()

從此組件分離現有的事件處理常式。

此方法與 on() 相反。

注意:如果為事件名稱傳遞了萬用字元模式,則只會移除使用此萬用字元註冊的處理程序,而使用符合此萬用字元的純名稱註冊的處理程序將保持不變。

另請參閱 on()

public boolean off ( $name, $handler null )
$name string

事件名稱

$handler callable|null

要移除的事件處理程序。如果為 null,則會移除附加到已命名事件的所有處理程序。

return boolean

如果找到並分離處理程序

                public function off($name, $handler = null)
{
    $this->ensureBehaviors();
    if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
        return false;
    }
    if ($handler === null) {
        unset($this->_events[$name], $this->_eventWildcards[$name]);
        return true;
    }
    $removed = false;
    // plain event names
    if (isset($this->_events[$name])) {
        foreach ($this->_events[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_events[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_events[$name] = array_values($this->_events[$name]);
            return true;
        }
    }
    // wildcard event names
    if (isset($this->_eventWildcards[$name])) {
        foreach ($this->_eventWildcards[$name] as $i => $event) {
            if ($event[0] === $handler) {
                unset($this->_eventWildcards[$name][$i]);
                $removed = true;
            }
        }
        if ($removed) {
            $this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
            // remove empty wildcards to save future redundant regex checks:
            if (empty($this->_eventWildcards[$name])) {
                unset($this->_eventWildcards[$name]);
            }
        }
    }
    return $removed;
}

            
on() public method

定義於: yii\base\Component::on()

將事件處理常式附加到事件。

事件處理程序必須是有效的 PHP 回呼。以下是一些範例

function ($event) { ... }         // anonymous function
[$object, 'handleClick']          // $object->handleClick()
['Page', 'handleClick']           // Page::handleClick()
'handleClick'                     // global function handleClick()

事件處理程序必須使用以下簽章定義:

function ($event)

其中 $event 是一個 yii\base\Event 物件,其中包含與事件相關聯的參數。

自 2.0.14 版起,您可以將事件名稱指定為萬用字元模式

$component->on('event.group.*', function ($event) {
    Yii::trace($event->name . ' is triggered.');
});

另請參閱 off()

public void on ( $name, $handler, $data null, $append true )
$name string

事件名稱

$handler callable

事件處理程序

$data mixed

當事件觸發時,要傳遞給事件處理程序的資料。當調用事件處理程序時,可以透過 yii\base\Event::$data 存取此資料。

$append boolean

是否將新的事件處理程序附加到現有處理程序列表的末尾。如果為 false,則新處理程序將插入到現有處理程序列表的開頭。

                public function on($name, $handler, $data = null, $append = true)
{
    $this->ensureBehaviors();
    if (strpos($name, '*') !== false) {
        if ($append || empty($this->_eventWildcards[$name])) {
            $this->_eventWildcards[$name][] = [$handler, $data];
        } else {
            array_unshift($this->_eventWildcards[$name], [$handler, $data]);
        }
        return;
    }
    if ($append || empty($this->_events[$name])) {
        $this->_events[$name][] = [$handler, $data];
    } else {
        array_unshift($this->_events[$name], [$handler, $data]);
    }
}

            
prepareDataProvider() protected method

準備資料提供者,此提供者應回傳所請求的模型集合。

protected yii\data\ActiveDataProvider prepareDataProvider ( )

                protected function prepareDataProvider()
{
    $requestParams = Yii::$app->getRequest()->getBodyParams();
    if (empty($requestParams)) {
        $requestParams = Yii::$app->getRequest()->getQueryParams();
    }
    $filter = null;
    if ($this->dataFilter !== null) {
        $this->dataFilter = Yii::createObject($this->dataFilter);
        if ($this->dataFilter->load($requestParams)) {
            $filter = $this->dataFilter->build();
            if ($filter === false) {
                return $this->dataFilter;
            }
        }
    }
    if ($this->prepareDataProvider !== null) {
        return call_user_func($this->prepareDataProvider, $this, $filter);
    }
    /* @var $modelClass \yii\db\BaseActiveRecord */
    $modelClass = $this->modelClass;
    $query = $modelClass::find();
    if (!empty($filter)) {
        $query->andWhere($filter);
    }
    if (is_callable($this->prepareSearchQuery)) {
        $query = call_user_func($this->prepareSearchQuery, $query, $requestParams);
    }
    if (is_array($this->pagination)) {
        $pagination = ArrayHelper::merge(
            [
                'params' => $requestParams,
            ],
            $this->pagination
        );
    } else {
        $pagination = $this->pagination;
        if ($this->pagination instanceof Pagination) {
            $pagination->params = $requestParams;
        }
    }
    if (is_array($this->sort)) {
        $sort = ArrayHelper::merge(
            [
                'params' => $requestParams,
            ],
            $this->sort
        );
    } else {
        $sort = $this->sort;
        if ($this->sort instanceof Sort) {
            $sort->params = $requestParams;
        }
    }
    return Yii::createObject([
        'class' => ActiveDataProvider::className(),
        'query' => $query,
        'pagination' => $pagination,
        'sort' => $sort,
    ]);
}

            
run() public method

public yii\data\ActiveDataProvider run ( )

                public function run()
{
    if ($this->checkAccess) {
        call_user_func($this->checkAccess, $this->id);
    }
    return $this->prepareDataProvider();
}

            
runWithParams() public method

定義於: yii\base\Action::runWithParams()

使用指定的參數執行此動作。

此方法主要由控制器調用。

public mixed runWithParams ( $params )
$params array

要繫結到 action 的 run() 方法的參數。

return mixed

action 的結果

throws yii\base\InvalidConfigException

如果 action 類別沒有 run() 方法

                public function runWithParams($params)
{
    if (!method_exists($this, 'run')) {
        throw new InvalidConfigException(get_class($this) . ' must define a "run()" method.');
    }
    $args = $this->controller->bindActionParams($this, $params);
    Yii::debug('Running action: ' . get_class($this) . '::run(), invoked by ' . get_class($this->controller), __METHOD__);
    if (Yii::$app->requestedParams === null) {
        Yii::$app->requestedParams = $args;
    }
    if ($this->beforeRun()) {
        $result = call_user_func_array([$this, 'run'], $args);
        $this->afterRun();
        return $result;
    }
    return null;
}

            
trigger() public method

定義於: yii\base\Component::trigger()

觸發一個事件。

此方法表示事件的發生。它會調用事件的所有附加處理程序,包括類別層級的處理程序。

public void trigger ( $name, yii\base\Event $event null )
$name string

事件名稱

$event yii\base\Event|null

事件實例。如果未設定,將建立預設的 yii\base\Event 物件。

                public function trigger($name, Event $event = null)
{
    $this->ensureBehaviors();
    $eventHandlers = [];
    foreach ($this->_eventWildcards as $wildcard => $handlers) {
        if (StringHelper::matchWildcard($wildcard, $name)) {
            $eventHandlers[] = $handlers;
        }
    }
    if (!empty($this->_events[$name])) {
        $eventHandlers[] = $this->_events[$name];
    }
    if (!empty($eventHandlers)) {
        $eventHandlers = call_user_func_array('array_merge', $eventHandlers);
        if ($event === null) {
            $event = new Event();
        }
        if ($event->sender === null) {
            $event->sender = $this;
        }
        $event->handled = false;
        $event->name = $name;
        foreach ($eventHandlers as $handler) {
            $event->data = $handler[1];
            call_user_func($handler[0], $event);
            // stop further handling if the event is handled
            if ($event->handled) {
                return;
            }
        }
    }
    // invoke class-level attached handlers
    Event::trigger($this, $name, $event);
}