https://join.slack.com/t/yii/shared_invite/MjIxMjMxMTk5MTU1LTE1MDE3MDAwMzMtM2VkMTMyMjY1Ng
yii\base\Controller
versus yii\web\Controller
What is the best practice for using Access Tokens in apis?
$identity = self::find()->where(['access_token' => $token])->select('id')->one();
if ($identity == null) return null;
//As per the recommendations, https://www.yiiframework.com/doc/api/2.0/yii-web-identityinterface#findIdentityByAccessToken()-detail
// null should be re turned here.
if (!Yii::$app->authManager->checkAccess($identity->id, Permissions::IdentifyWithAccessToken))
return null;
return $identity;
this doesn't seem all that secure having it in plain text.
$model->link('organisationUsers', Yii::$app->user->identity, ['status' => 10, 'role' => 10]);
.in /app/vendor/yiisoft/yii2/db/BaseActiveRecord.php at line 1350– yii\db\BaseActiveRecord::bindModels(['organisation_id' => 'id'], common\models\User, common\models\Organisation)
.I have tried
'container' => [
'definitions' => [
yii\base\Model::class => app\models\Model::class,
but that doesn't do anything. The models dont have any of the app\models\Model::class
and are not instances of it
$model = TestModel::findOne(['id' => 3]);
$success = $model instanceof \app\models\Model;
if (!$success) Yii::$app->session->addFlash('danger', 'failed to override');
this always fails
Hey guys, I have a question regarding the yiisoft/yii2-queue and the monitor extension from Roman Zhuravlev. I need to implement a worker affinity for jobs.
I start worker using supervisor in docker container (1 or many):
[group:worker]
programs=yii-queue-worker
priority=40
[program:yii-queue-worker]
command=yii queue/listen --verbose=1 --php-binary=/usr/local/bin/php --isolate=1 --color=0 --interactive=0
process_name=%(program_name)s_%(process_num)02d
autostart=true
numprocs=5
autorestart=true
startsecs=14
startretries=20
user=application
stdout_logfile = /dev/stdout
stdout_logfile_maxbytes = 0
stderr_logfile = /dev/stderr
stderr_logfile_maxbytes = 0
So I have 5 isolated queue listeners up and running in each container / host.
Now a job A was pushed for the first time and gets executed by worker A on host A.
Then I remember (using a simple key value store in redis) that job A was processed by worker A on host A.
Works fine so far and I can access that information everywhere.
Now the next time job A comes I need to ensure that this job A will only gets executed on worker A on host A.
Until worker A on host A is busy that job A needs to wait.
I tried a lot to get that done but job A gets always executed by one of the next free available worker process.
I use own extended classes doing nothing atm then calling the parent class methods to be able to customize.
Here`s my config:
'queue' => [
'class' => ProjectQueue::class,
'commandClass' => ProjectCommand::class,
'as log' => [
'class' => ProjectLogBehavior::class,
'autoFlush' => true,
],
'as jobMonitor' => [
'class' => ProjectJobMonitor::class,
],
'as workerMonitor' => [
'class' => ProjectWorkerMonitor::class,
],
'mutex' => [
'class' => MysqlMutex::class,
'db' => 'db',
'autoRelease' => false,
],
'mutexTimeout' => 10,
'db' => 'db',
'channel' => 'master-queue',
'deleteReleased' => true,
'ttr' => 200,
'attempts' => 1,
],
Now my question. Is that possible at all? And where I need to slide in to get that done.
Thanks in advance !
🎁 Yii news 2020, issue 8: https://opencollective.com/yiisoft/updates/yii-news-2020-issue-8
🎄 Happy New Year!
good day, i setup DBSession:
'session' => [
'class' => 'yii\web\DbSession',
'timeout' => 3600 * 4,
'writeCallback' => function($session)
{
return [
'user_id' => Yii::$app->user->isGuest ? null : Yii::$app->user->id,
'agent' => Yii::$app->request->userAgent,
'ip' => ip2long(Yii::$app->request->userIP),
];
}
],
create mysql table:
CREATE TABLE tbl_session
(
id
char(64) NOT NULL,
expire
int(11) DEFAULT NULL,
data
blob,
user_id
char(36) DEFAULT NULL,
agent
char(255) DEFAULT NULL,
ip
int(11) UNSIGNED DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
and when user is login user_id is ignored to insert to db, in debug i have request:
NSERT INTO tbl_session
(user_id
, agent
, ip
, data
, id
, expire
) VALUES ('ab44c918-81f3-46fc-9720-a168ce652729', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36', 168433921, 'flash|a:0:{}returnUrl|s:26:\"\";id|s:36:\"ab44c918-81f3-46fc-9720-a168ce652729\";authKey|s:12:\"a168ce652729\";', 'ha5gmmtpatjou0', 1638538767) ON DUPLICATE KEY UPDATE agent
=VALUES(agent
), ip
=VALUES(ip
), data
=VALUES(data
)
I think this has to do with a missing PRIMARY or UNIQUE KEY in your database table schema:
https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html
thanks for your message, problem is solved. user_id was foreign key.
Hi everyone
I think that one of the reasons for the lack of development of Yii framework community compared to the Laravel framework is that Yii framework is insular in the local languages of each country.
Now with the review I did:
Russian telegram group: about 2000 members
Indonesian telegram group: about 1500 members
Uzbekistan telegram group: about 500 members
But there is no any English telegram group for powerful Yii2 framework. Why? 😳😐🤔
in this reason, I created a telegram group for Yii2 in English, please join it: