Почему несколько сценариев не работают в Yii?
Я использую несколько сценариев в своем приложении, но сталкиваюсь с проблемой, которая каждый раз, когда последний сценарий отменяет первый.
Модель:
public function rules()
{
return array(
[...]
array('cost_spares', 'cost_spare_func', 'match',
'pattern' => '/^[a-zA-Z]+$/',
'message' => 'Do not enter zero or/and characters for Spare parts!',
'on' => 'cost_spare_func'),
array('cost_labour', 'cost_labour_func', 'match',
'pattern' => '/^[a-zA-Z]+$/',
'message' => 'Do not enter zero or/and characters for Labour Charges!',
'on' => 'cost_labour_func'),
);
}
Контроллер:
public function actionUpdate ($id)
{
if (isset($_POST['TblEnquiry']))
{
[...]
$model->setScenario('cost_spare_func');
$model->setScenario('cost_labour_func');
}
}
1 ответ
Что касается документов:
Во-первых, важно отметить, что любые правила, которым не присвоен сценарий, будут применяться ко всем сценариям.
Поэтому я думаю, что вам, возможно, не нужен сценарий, а просто используйте общие правила / проверки.
ИЛИ ЖЕ
У вас есть один сценарий для ваших правил, как это:
public function rules()
{
return array(
[...]
array('cost_spares','numerical',
'integerOnly' => true,
'min' => 1,
'max' => 250,
'tooSmall' => 'You must order at least 1 piece',
'tooBig' => 'You cannot order more than 250 pieces at once',
'message' => 'Do not enter zero or/and characters for Spare parts!',
'on' => 'myScenario'),
array('cost_labour','numerical',
'integerOnly' => true,
'min' => 1,
'max' => 250,
'tooSmall' => 'You must order at least 1 piece',
'tooBig' => 'You cannot order more than 250 pieces at once',
'message' => 'Do not enter zero or/and characters for Labour Charges!',
'on' => 'myScenario'),
);
}
И в вашем контроллере вы просто пишете:
public function actionUpdate ($id)
{
if (isset($_POST['TblEnquiry']))
{
[...]
$model->setScenario('myScenario');
}
}
Редактировать:
Что касается этого документа, я просто вижу, что вы хотите только numerical
вход. Так что это может лучше соответствовать вашим потребностям. И так как оба получили одну и ту же проверку, вы можете просто сделать одну проверку и передать в нее сообщение позже. Но пока это должно работать.
Дополнительно:
В ваших правилах есть еще одна ошибка, как вы написали.
array('cost_spares', 'cost_spare_func', 'match',
'pattern' => '/^[a-zA-Z]+$/',
'message' => 'Do not enter zero or/and characters for Spare parts!',
'on' => 'cost_spare_func'),
Это невозможно. Вы не можете смешивать функцию проверки правила и проверку по умолчанию, например match
,
Это означает, что вы можете определить только validation function
как это:
array('cost_spares', 'cost_spare_func',
'message' => 'Do not enter zero or/and characters for Spare parts!',
'on' => 'cost_spare_func'),
ИЛИ используйте проверку по умолчанию, например:
array('cost_spares', 'match',
'pattern' => '/^[a-zA-Z]+$/',
'message' => 'Do not enter zero or/and characters for Spare parts!',
'on' => 'cost_spare_func'),