Сортировка просто по количеству товаров не подходит, так как кроме этой сортировки есть еще 2 (по цене и по еще одному полю).
$products = Product::find()->where([/**/])->orderBy(['count' => SORT_DESC, 'price' => SORT_DESC, 'eshe_odno_pole' => SORT_DESC])->all();
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=my_db',
'username' => 'db_user',
'password' => 'db_password',
// 'enableSchemaCache' => true,
// 'schemaCacheDuration' => 3600,
// 'tablePrefix' => '',
// 'charset' => 'utf8mb4',
// 'enableQueryCache' => true,
// 'queryCacheDuration' => 600,
],
backend && frontend && console
) нужно вынести в main-local.php в папке common
. А все файлы конфигурации настраивать в папке environments
и запускать php init
. Yii::$app->queue->delay(5 * 60)->push(new MassSendMailJob([
'emails' => Clients::findAll(['notify_me' => true]),
'text' => $text,
]));
application.css
и application.js
должны находится в @webroot/css|@webroot/js
соответственно.@frontend/assets
то и пишите так:<?php
namespace frontend\assets;
use yii\web\AssetBundle;
/**
* Main frontend application asset bundle.
*/
class AppAsset extends AssetBundle
{
public $sourcePath = '@frontend/assets';
public $css = [
'css/application.css',
];
public $js = [
'js/application.js',
];
public $depends = [
'yii\web\YiiAsset',
];
}
@frontend/assets/css/application.css
@frontend/assets/js/application.js
[
['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;
},
],
<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;
}
}