Символы ASCII с кодом от 33 до 126 — в этом списке нижнего подчеркивания нет. snake_case не поддерживается.
throw new Exception(__('messages.order_failed'));
// messages.php:
return [
'order_failed' => 'любое количество текста',
]
Используется фреймворк: Yii2. В нём есть средства интернационализации, и используя их можно вставлять идентификатор текста, вместо самого текста: Yii:t('PROVIDER_CANCEL_ERROR'), но всё же он не для таких целей предназначен.
actionLogin()
Вы используете такую сложную конструкцию, которая, в данном случае, не имеет особого смысла. На вашем примере можно попользоваться функцией:Yii::$app->getAuthManager()->checkAccess(32, 'admin')
public function actionLogin()
{
$model = new LoginForm();
$model->password = ''; // перенести в метод rules формы, как default
if($model->load(Yii::$app->request->post()) && $model->login()){
$user = User::findOne(['username' => $this->username]);
if(Yii::$app->getAuthManager()->checkAccess($user->getId(), 'admin')){
throw new ForbiddenHttpException('Ошибка доступа');
}
return $this->goHome();
}
return $this->render('login', [
'model' => $model
]);
}
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::class,
'rules' => [
[
'actions' => ['create', 'update'],
'allow' => true,
'matchCallback' => function ($rule, $action) {
/** @var User $identity */
$identity = Yii::$app->user->getIdentity();
return $identity->isAdmin(); // или другая проверка
}
],
],
],
];
}
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::class,
'rules' => [
[
'actions' => ['create', 'update'],
'allow' => true,
'roles' => ['admin']
],
],
],
];
}
allow
выбранного правила указывает, авторизовывать пользователя или нет. Если ни одно из правил не совпало, то пользователь считается НЕавторизованным, и фильтр ACF останавливает дальнейшее выполнение действия. По умолчанию, когда у пользователя отсутствует доступ к текущему действию, ACF делает следующее:AccessControl
SELECT `g`.*
FROM (
SELECT `goods_id`
FROM `goods_property`
WHERE (`type` = 'caffeine_capacity' AND `value` = 'small')
OR (`type` = 'color_type' AND `value` = 'green')
GROUP BY `goods_id`
HAVING COUNT(*) = 2
) AS `p`
JOIN `goods` AS `g` ON `g`.`id` = `p`.`goods_id`
SELECT `g`.*
FROM `goods` AS `g`
JOIN `goods_property` AS `p1` ON `p1`.`goods_id` = `g`.`id`
AND `p1`.`type` = 'caffeine_capacity' AND `p1`.`value` = 'small'
JOIN `goods_property` AS `p2` ON `p2`.`goods_id` = `g`.`id`
AND `p2`.`type` = 'color_type' AND `p2`.`value` = 'green'
SELECT `g`.*
FROM `goods`
WHERE `id` IN (
SELECT `goods_id`
FROM `goods_property`
WHERE `type` = 'caffeine_capacity' AND `value` = 'small'
) AND `id` IN (
SELECT `goods_id`
FROM `goods_property`
WHERE `type` = 'color_type' AND `value` = 'green'
)
class Set extends React.Component {
constructor(props) {
super(props);
this.state = {
id: props.id,
weight: null,
reps: null,
enableMaxReps: false,
number: props.number || 0,
isFilled: false,
};
}
}
yum update ca-certificates
или yum reinstall ca-certificates
curl --cacert dummy_xxx https://www.google.com
- должен показать используемую папку с CA сертификатами. const values = [ id, sum, system, date ];
.payment.innerHTML = values.map(n => `<td>${n}</td>`).join('');
// или
values.forEach(n => payment.insertCell().textContent = n);
// или
payment.append(...values.map(n => {
const td = document.createElement('td');
td.innerText = n;
return td;
}));
- function createPayment({id, sum, system, date}) {
+ function createPayment(data) {
- const values = [ id, sum, system, date ];
+ const keys = [ 'id', 'sum', 'system', 'date' ];
- values.forEach(n => payment.insertCell().textContent = n);
+ keys.forEach(n => payment.insertCell().textContent = data[n]);