-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathMeController.php
executable file
·82 lines (76 loc) · 2.51 KB
/
MeController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php
namespace app\controllers;
use app\models\Comment;
use app\models\Post;
use app\transformers\CommentTransformer;
use app\transformers\PostShortTransformer;
use insolita\fractal\actions\CountForIdentityAction;
use insolita\fractal\actions\ListForIdentityAction;
use insolita\fractal\actions\ViewForIdentityAction;
use insolita\fractal\JsonApiController;
use League\Fractal\Resource\Item;
use app\transformers\UserExtendTransformer;
use app\transformers\UserTransformer;
use Yii;
use yii\db\ActiveQuery;
use yii\filters\AccessControl;
use yii\filters\auth\HttpBearerAuth;
use const SORT_DESC;
class MeController extends JsonApiController
{
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['access'] = [
'class' => AccessControl::class,
'rules' => [
['allow' => true, 'roles' => ['@']]
],
];
$behaviors['authenticator']['authMethods']=[
HttpBearerAuth::class
];
return $behaviors;
}
public function actions()
{
return [
'my-posts' => [
'class' => ListForIdentityAction::class,
'userIdAttribute' => 'author_id',
'modelClass' => Post::class,
'transformer' => PostShortTransformer::class
],
'my-last-comment' => [
'class' => ViewForIdentityAction::class,
'userIdAttribute' => 'user_id',
'modelClass' => Comment::class,
'transformer' => CommentTransformer::class,
'queryWrapper' => function(ActiveQuery $query) {
return $query->orderBy(['created_at' => SORT_DESC]);
}
],
'my-comment' => [
'class' => ViewForIdentityAction::class,
'userIdAttribute' => 'user_id',
'modelClass' => Comment::class,
'transformer' => CommentTransformer::class,
],
'posts-count' => [
'class' => CountForIdentityAction::class,
'userIdAttribute' => 'author_id',
'modelClass' => Post::class,
]
];
}
public function actionInfo()
{
$model = Yii::$app->user->getIdentity();
return new Item($model, new UserTransformer(), 'me');
}
public function actionDetails()
{
$model = Yii::$app->user->getIdentity();
return new Item($model, new UserExtendTransformer(), 'me');
}
}