<span>
</span>
<span>
public
</span>
function
run(
$route
, $<span>params</span> =<span> [])
{
$pos
</span>=
strpos
(
$route
, <span>
'</span><span>/</span><span>'
</span><span>);
</span><span>
if
</span> (
$pos
=== <span>false</span>) {<span>
<span>
return
</span> $<span>this</span>->runAction(
$route
, $<span>params</span><span>);
}
elseif
(
$pos
</span>> <span>0</span><span>) {
</span><span>
return
</span> $<span>this</span>->module->runAction(
$route
, $<span>params</span><span>);
} </span><span>
else
</span><span> {
</span><span>
return
</span> Yii::
$app
->runAction(ltrim(
$route
, <span>
'</span><span>/</span><span>'
</span>), $<span>params</span><span>);
}
}
</span><span>
</span>
<span>
public
</span>
function
bindActionParams(
$action
, $<span>params</span><span>)
{
</span><span>
return
</span><span> [];
}
</span><span>
</span>
<span>
public
</span><span>
function
createAction(
$id
)
{
</span><span>
if
</span> (
$id
=== <span>
''
</span><span>) {
</span><span>
$id
= $<span>this</span>-><span>defaultAction;
}
$actionMap
</span>= $<span>this</span>->actions();<span>
<span>
if
</span><span> (isset(
$actionMap
[
$id
])) {
</span><span>
<span>
return
</span> Yii::createObject(
$actionMap
[
$id
], [
$id
, $<span>this</span><span>]);
}
elseif
(preg_match(</span><span>
'</span><span>/^[a-z0-9\\-_]+$/</span><span>'
</span>,
$id
) &&
strpos
(
$id
, <span>
'</span><span>--</span><span>'
</span>) === <span>false</span> && trim(
$id
, <span>
'</span><span>-</span><span>'
</span>) ===<span>
$id
) {
</span><span>
</span><span>
$methodName
= <span>
'</span><span>action</span><span>'
</span> .
str_replace
(<span>
'</span> <span>'
</span>, <span>
''
</span>, ucwords(implode(<span>
'</span> <span>'
</span>,
explode
(<span>
'</span><span>-</span><span>'
</span><span>,
$id
))));
</span><span>
if
</span> (method_exists($<span>this</span><span>,
$methodName
)) {
</span><span>
$method
= <span>
new
</span> \ReflectionMethod($<span>this</span><span>,
$methodName
);
</span><span>
if
</span> (
$method
->isPublic() &&
$method
->getName() ===<span>
$methodName
) {
</span><span>
<span>
return
</span> <span>
new
</span> InlineAction(
$id
, $<span>this</span><span>,
$methodName
);
}
}
}
</span><span>
return
</span> <span>null</span><span>;
}
</span><span>
</span>
<span>
public
</span><span>
function
beforeAction(
$action
)
{
$</span><span>event</span> = <span>
new
</span><span> ActionEvent(
$action
);
$</span><span>this</span>->trigger(self::EVENT_BEFORE_ACTION, $<span>event</span><span>);
</span><span>
return
</span> $<span>event</span>-><span>isValid;
}
</span><span>
</span>
<span>
public
</span><span>
function
afterAction(
$action
,
$result
)
{
$</span><span>event</span> = <span>
new
</span><span> ActionEvent(
$action
);
$</span><span>event</span>->result =<span>
$result
;
$</span><span>this</span>->trigger(self::EVENT_AFTER_ACTION, $<span>event</span><span>);
</span><span>
return
</span> $<span>event</span>-><span>result;
}
</span><span>
</span>
<span>
public
</span><span>
function
getModules()
{
</span><span>
$modules
= [$<span>this</span>-><span>module];
$module
</span>= $<span>this</span>-><span>module;
</span><span>
while
</span> (
$module
->module !== <span>null</span><span>) {
</span><span>
array_unshift
(
$modules
,
$module
-><span>module);
$module
</span>=
$module
-><span>module;
}
</span><span>
return
</span><span>
$modules
;
}
</span><span>
</span>
<span>
public
</span><span>
function
getUniqueId()
{
</span><span>
<span>
return
</span> $<span>this</span>->module
instanceof
Application ? $<span>this</span>->id : $<span>this</span>->module->getUniqueId() . <span>
'</span><span>/</span><span>'
</span> . $<span>this</span>-><span>id;
}
</span><span>
</span>
<span>
public
</span><span>
function
getRoute()
{
</span><span>
return
</span> $<span>this</span>->action !== <span>null</span> ? $<span>this</span>->action->getUniqueId() : $<span>this</span>-><span>getUniqueId();
}
</span><span>
</span>
<span>
public
</span>
function
render(
$view
, $<span>params</span> =<span> [])
{
</span><span>
$content
= $<span>this</span>->getView()->render(
$view
, $<span>params</span>, $<span>this</span><span>);
</span><span>
return
</span> $<span>this</span>->renderContent(
$content
);<span>
<span> }
</span><span>
</span>
<span>
public
</span><span>
function
renderContent(
$content
)
{
$layoutFile
</span>= $<span>this</span>->findLayoutFile($<span>this</span>->getView()); <span>
<span>
if
</span> (
$layoutFile
!== <span>false</span>) {<span>
<span>
return
</span> $<span>this</span>->getView()->renderFile(
$layoutFile
, [<span>
'</span><span>content</span><span>'
</span> =>
$content
], $<span>this</span><span>);
} </span><span>
else
</span><span> {
</span><span>
return
</span><span>
$content
;
}
}
</span><span>
</span>
<span>
public
</span>
function
renderPartial(
$view
, $<span>params</span> =<span> [])
{
</span><span>
return
</span> $<span>this</span>->getView()->render(
$view
, $<span>params</span>, $<span>this</span><span>);
}
</span><span>
</span>
<span>
public
</span>
function
renderFile(
$file
, $<span>params</span> =<span> [])
{
</span><span>
return
</span> $<span>this</span>->getView()->renderFile(
$file
, $<span>params</span>, $<span>this</span><span>);
}
</span><span>
</span>
<span>
public
</span><span>
function
getView()
{
</span><span>
if
</span> ($<span>this</span>->_view === <span>null</span><span>) {
$</span><span>this</span>->_view = Yii::
$app
-><span>getView();
}
</span><span>
return
</span> $<span>this</span>-><span>_view;
}
</span><span>
</span>
<span>
public
</span><span>
function
setView(
$view
)
{
$</span><span>this</span>->_view =<span>
$view
;
}
</span><span>
</span>
<span>
public
</span><span>
function
getViewPath()
{
</span><span>
return
</span> $<span>this</span>->module->getViewPath() . DIRECTORY_SEPARATOR . $<span>this</span>-><span>id;
}
</span><span>
</span>
<span>
public
</span><span>
function
findLayoutFile(
$view
)
{
$module
</span>= $<span>this</span>-><span>module;
</span><span>
if
</span> (
is_string
($<span>this</span>-><span>layout)) {
</span><span>
$layout
= $<span>this</span>-><span>layout;
}
elseif
($</span><span>this</span>->layout === <span>null</span><span>) {
</span><span>
<span>
while
</span> (
$module
!== <span>null</span> &&
$module
->layout === <span>null</span><span>) {
$module
</span>=
$module
-><span>module;
}
</span><span>
if
</span> (
$module
!== <span>null</span> &&
is_string
(
$module
-><span>layout)) {
$layout
</span>=
$module
-><span>layout;
}
}
</span><span>
if
</span> (!<span>isset(
$layout
)) {
</span><span>
return
</span> <span>false</span>;<span>
<span> }
</span><span>
if
</span> (
strncmp
(
$layout
, <span>
'</span><span>@</span><span>'
</span>, <span>1</span>) === <span>0</span><span>) {
$file
</span>= Yii::getAlias(
$layout
);<span>
}
elseif
(
strncmp
(
$layout
, <span>
'</span><span>/</span><span>'
</span>, <span>1</span>) === <span>0</span>) {<span>
$file
= Yii::
$app
->getLayoutPath() . DIRECTORY_SEPARATOR .
substr
(
$layout
, <span>1</span><span>);
} </span><span>
else
</span> {<span>
$file
=
$module
-><span>getLayoutPath() . DIRECTORY_SEPARATOR .
$layout
;
}
</span><span>
if
</span> (
pathinfo
(
$file
, PATHINFO_EXTENSION) !== <span>
''
</span><span>) {
</span><span>
return
</span>
$file
;<span>
<span> }
$path
</span>=
$file
. <span>
'</span><span>.</span><span>'
</span> .
$view
->defaultExtension;<span>
<span>
if
</span> (
$view
->defaultExtension !== <span>
'</span><span>php</span><span>'
</span> && !<span>
is_file
(
$path
)) {
$path
</span>=
$file
. <span>
'</span><span>.php</span><span>'
</span>;<span>
<span> }
</span><span>
return
</span><span>
$path
;
}</span>