-
Notifications
You must be signed in to change notification settings - Fork 3
/
Yii2PerRequestPlugins.php
79 lines (69 loc) · 3.16 KB
/
Yii2PerRequestPlugins.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
<?php
/******************************************************************************
* Copyright 2020 NAVER Corp. *
* *
* Licensed under the Apache License, Version 2.0 (the "License"); *
* you may not use this file except in compliance with the License. *
* You may obtain a copy of the License at *
* *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, software *
* distributed under the License is distributed on an "AS IS" BASIS, *
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
* See the License for the specific language governing permissions and *
* limitations under the License. *
******************************************************************************/
namespace Pinpoint\Plugins;
use yii;
use Pinpoint\Plugins\PinpointPerRequestPlugins;
use Pinpoint\Common\UserFrameworkInterface;
use Pinpoint\Common\AspectClassHandle;
use Pinpoint\Common\Logger;
class Yii2PerRequestPlugins extends PinpointPerRequestPlugins implements UserFrameworkInterface
{
// private $_yiiLoader = array();
public function __construct()
{
parent::__construct();
}
/**
* port from https://github.com/yiisoft/yii2/blob/6804fbeae8aa5f8ad5066b50f1864eb0b9d77849/framework/BaseYii.php#L279-L293
*/
public function findFileInYii2($className): string
{
$classFile = false;
Logger::Inst()->debug("try to yii::loader '$className' ");
if (isset(Yii::$classMap[$className])) {
$classFile = Yii::$classMap[$className];
if (strpos($classFile, '@') === 0) {
$classFile = Yii::getAlias($classFile);
}
} elseif (strpos($className, '\\') !== false) {
$classFile = Yii::getAlias('@' . str_replace('\\', '/', $className) . '.php', false);
}
if ($classFile === false || !is_file($classFile)) {
return "";
}
Logger::Inst()->debug("yii::loader '$className' ->'$classFile'");
// require_once file
return $classFile;
}
public function userFindClass(&$loader): callable
{
return [$this, 'findFileInYii2'];
}
public function joinedClassSet(): array
{
$cls = [];
// \yii\web\UrlManager
$classHandler = new AspectClassHandle(\yii\web\UrlManager::class);
$classHandler->addJoinPoint('parseRequest', \Pinpoint\Plugins\yii2\UrlRule::class);
$cls[] = $classHandler;
// yii\db\Connection::createPdoInstance
$classHandler = new AspectClassHandle(\yii\db\Connection::class);
$classHandler->addJoinPoint('createPdoInstance', \Pinpoint\Plugins\yii2\ConnectionPlugin::class);
$cls[] = $classHandler;
return $cls;
}
}