Параметры действий
Методы действий для встроенных действий и методы run()
для отдельных действий могут принимать параметры, называемые параметры действий. Их значения берутся из запросов. Для [[yii\web\Application|Веб приложений]], значение каждого из параметров действия берется из $_GET
, используя название параметра в качестве ключа; для [[yii\console\Application|консольных приложений]], они соответствуют аргументам командной строки.
В приведенном ниже примере, действие view
(встроенное действие) определяет два параметра: $id
и $version
.
namespace app\controllers;
use yii\web\Controller;
class PostController extends Controller
{
public function actionView($id, $version = null)
{
// ...
}
}
Для разных запросов параметры действий будут определены следующим образом:
http://hostname/index.php?r=post/view&id=123
: параметр$id
будет присвоено значение'123'
, в то время как$version
будет иметь значениеnull
, т. к. строка запроса не содержит параметраversion
;http://hostname/index.php?r=post/view&id=123&version=2
: параметрам$id
и$version
будут присвоены значения'123'
и'2'
соответственно;http://hostname/index.php?r=post/view
: будет брошено исключение [[yii\web\BadRequestHttpException]], т. к. обязательный параметр$id
не был указан в запросе;http://hostname/index.php?r=post/view&id[]=123
: будет брошено исключение [[yii\web\BadRequestHttpException]], т. к. параметр$id
получил неверное значение['123']
.
Если вы хотите, чтобы параметр действия принимал массив значений, вы должны использовать type-hint значение array
, как показано ниже:
public function actionView(array $id, $version = null)
{
// ...
}
Теперь, если запрос будет содержать URL http://hostname/index.php?r=post/view&id[]=123
, то параметр $id
примет значение ['123']
. Если запрос будет содержать URL http://hostname/index.php?r=post/view&id=123
, то параметр $id
все равно будет содержать массив, т. к. скалярное значение '123'
будет автоматически сконвертировано в массив.
Вышеприведенные примеры в основном показывают как параметры действий работают для Веб приложений. Больше информации о параметрах консольных приложений представлено в секции Консольные команды.