[
['value'],
function ($attribute, $params, $validator) {
try {
if (!preg_match($this->pattern, $this->{$attribute})) {
$this->addError($attribute, 'Значение не соответствует требуемому шаблону');
}
} catch (\Exception $e) {
$this->addError('pattern', 'Шаблон указан некорректно');
}
},
'when' => function ($model) {
return $model->pattern;
},
],
SELECT A.ID, A.post_title, B.id
FROM wp_posts A
INNER JOIN wp_postmeta B
ON B.post_id = A.id
WHERE A.post_type = 'points'
AND A.post_status = 'publish'
AND A>meta_key = 'pointmap';
SELECT `query`.*, (`pos_from`.`created_at` - `pos_to`.`created_at`) `pos_result_date`, FROM `query`
LEFT JOIN `query_position` `pos_from` ON (`query`.`query_id` = `pos_from`.`query_id`) AND (DATE_FORMAT(`pos_from`.`created_at`, '%d-%m-%Y') = '07-06-2017')
LEFT JOIN `query_position` `pos_to` ON (`query`.`query_id` = `pos_to`.`query_id`) AND (DATE_FORMAT(`pos_to`.`created_at`, '%d-%m-%Y') = '10-06-2017')
GROUP BY `query`.`query_id`
<form action="">
<select name="order_by">
<option value=""></option>
<option value="view_count">По популярности</option>
</select>
</form>
class NewsSearch extends Model {
public $order_by;
public function rules(){
return [
['order_by', 'in', 'range' => ['view_count', 'created_at']],
];
}
public function search(){
// ...
$query->orderBy([$this->order_by => SORT_ASC]);
// ...
}
}
/**
* Converts a given asset file into a CSS or JS file.
* @param string $asset the asset file path, relative to $basePath
* @param string $basePath the directory the $asset is relative to.
* @return string the converted asset file path, relative to $basePath.
*/
public function convert($asset, $basePath)
{
$pos = strrpos($asset, '.');
if ($pos !== false) {
$ext = substr($asset, $pos + 1);
if (isset($this->commands[$ext])) {
list ($ext, $command) = $this->commands[$ext];
$result = substr($asset, 0, $pos + 1) . $ext;
// все дело в этой проверке
// |||||||||||||||||||||||||||||||||||||||||||
// VVVVVVVVVVVVVVVVVV
if ($this->forceConvert || @filemtime("$basePath/$result") < @filemtime("$basePath/$asset")) {
$this->runCommand($command, $basePath, $asset, $result);
}
return $result;
}
}
return $asset;
}
foo.bar
, то файл foo.bar
копируется в assets
с таким же именем. Затем, согласно $commands
в AssetConverter
, имя должно смениться на foo.css
. А так как у нас пока еще foo.css
не существует, то и filemtime('foo.css') = false
, и если forceConvert = false
, а ставить его в true
имеет мало смысла, тогда и происходит запуск runCommand()
.hello.css
, он попадает в assets
уже с расширением css
, и если сравнить filemtime
сорца и результата, то они будут равны, и никакой магии не произойдёт. $authManager = Yii::$app->authManager;
$authManager->removeAll();
$guestSignUp = $authManager->createPermission('guest-sign-up');
$authManager->add($guestSignUp);
$userRoleRule = new UserRoleRule();
$authManager->add($userRoleRule);
$guest = $authManager->createRole('guest');
$authManager->add($guest);
$authManager->addChild($guest, $guestSignUp);
if (\Yii::$app->user->can('guest-sign-up')) {
echo Html::a('sign up', ['/sign-up']);
}
$authManager->addChild($guest, $guestSignUp);
и всё.<?php
namespace common\components\rbac;
use common\modules\user\models\User;
use yii;
use yii\rbac\Item;
use yii\rbac\Rule;
/**
* Class UserRoleRule
* @package common\components\rbac
*/
class UserRoleRule extends Rule
{
public $name = 'userRoleRule';
public function execute($user, $item, $params)
{
$role = Yii::$app->user->isGuest ? User::ROLE_GUEST : User::identity()->role;
if ($item->name === 'developer') {
return $role == User::ROLE_DEVELOPER;
} elseif ($item->name === 'admin') {
return $role >= User::ROLE_ADMIN;
} elseif ($item->name === 'manager') {
return $role == User::ROLE_MANAGER || $role >= User::ROLE_ADMIN;
} elseif ($item->name === 'author') {
return $role == User::ROLE_AUTHOR || $role >= User::ROLE_ADMIN;
} elseif ($item->name === 'user') {
return $role == User::ROLE_USER || $role >= User::ROLE_ADMIN;
} elseif ($item->name === 'guest') {
return $role == User::ROLE_GUEST || $role >= User::ROLE_ADMIN;
}
return false;
}
}