Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PSDI Army
yii2
Commits
1db738ef
Commit
1db738ef
authored
Apr 30, 2012
by
Qiang Xue
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
implemented action.
parent
165bb02a
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
85 additions
and
119 deletions
+85
-119
Action.php
framework/base/Action.php
+41
-72
Controller.php
framework/base/Controller.php
+20
-20
InlineAction.php
framework/base/InlineAction.php
+24
-27
No files found.
framework/base/Action.php
View file @
1db738ef
<?php
<?php
/**
/**
*
C
Action class file.
* Action class file.
*
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
* @link http://www.yiiframework.com/
* @copyright Copyright © 2008-201
1
Yii Software LLC
* @copyright Copyright © 2008-201
2
Yii Software LLC
* @license http://www.yiiframework.com/license/
* @license http://www.yiiframework.com/license/
*/
*/
namespace
yii\base
;
/**
/**
*
C
Action is the base class for all controller action classes.
* Action is the base class for all controller action classes.
*
*
*
C
Action provides a way to divide a complex controller into
* Action provides a way to divide a complex controller into
* smaller actions in separate class files.
* smaller actions in separate class files.
*
*
* Derived classes must implement {@link run()} which is invoked by
* Derived classes must implement {@link run()} which is invoked by
...
@@ -19,92 +20,60 @@
...
@@ -19,92 +20,60 @@
*
*
* An action instance can access its controller via {@link getController controller} property.
* An action instance can access its controller via {@link getController controller} property.
*
*
* @property CController $controller The controller who owns this action.
* @property string $id Id of this action.
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @author Qiang Xue <qiang.xue@gmail.com>
* @version $Id$
* @since 2.0
* @package system.web.actions
* @since 1.0
*/
*/
abstract
class
CAction
extends
CComponent
implements
IAction
class
Action
extends
Component
{
{
private
$_id
;
private
$_controller
;
/**
* Constructor.
* @param CController $controller the controller who owns this action.
* @param string $id id of the action.
*/
public
function
__construct
(
$controller
,
$id
)
{
$this
->
_controller
=
$controller
;
$this
->
_id
=
$id
;
}
/**
/**
* @
return CController the controller who owns this action.
* @
var string ID of the action
*/
*/
public
function
getController
()
public
$id
;
{
return
$this
->
_controller
;
}
/**
/**
* @
return string id of
this action
* @
var Controller the controller that owns
this action
*/
*/
public
function
getId
()
public
$controller
;
{
return
$this
->
_id
;
}
/**
/**
* Runs the action with the supplied request parameters.
* Extracts the input parameters according to the signature of the "run()" method.
* This method is internally called by {@link CController::runAction()}.
* This method is invoked by controller when it attempts to run the action
* @param array $params the request parameters (name=>value)
* with the user supplied parameters.
* @return boolean whether the request parameters are valid
* @param array $params the parameters in name-value pairs
* @since 1.1.7
* @return array|boolean the extracted parameters in the order as declared in the "run()" method.
* False is returned if the input parameters do not follow the method declaration.
*/
*/
public
function
runWith
Params
(
$params
)
public
function
normalize
Params
(
$params
)
{
{
$method
=
new
ReflectionMethod
(
$this
,
'run'
);
$method
=
new
\ReflectionMethod
(
$this
,
'run'
);
if
(
$method
->
getNumberOfParameters
()
>
0
)
return
$this
->
normalizeParamsByMethod
(
$method
,
$params
);
return
$this
->
runWithParamsInternal
(
$this
,
$method
,
$params
);
else
return
$this
->
run
();
}
}
/**
/**
* Executes a method of an object with the supplied named parameters.
* Extracts the input parameters according to the specified method signature.
* This method is internally used.
* @param \ReflectionMethod $method the method reflection
* @param mixed $object the object whose method is to be executed
* @param array $params the parameters in name-value pairs
* @param ReflectionMethod $method the method reflection
* @return array|boolean the extracted parameters in the order as declared in the "run()" method.
* @param array $params the named parameters
* False is returned if the input parameters do not follow the method declaration.
* @return boolean whether the named parameters are valid
* @since 1.1.7
*/
*/
protected
function
runWithParamsInternal
(
$object
,
$method
,
$params
)
protected
function
normalizeParamsByMethod
(
$method
,
$params
)
{
{
$ps
=
array
();
$ps
=
array
();
foreach
(
$method
->
getParameters
()
as
$i
=>
$param
)
foreach
(
$method
->
getParameters
()
as
$param
)
{
{
$name
=
$param
->
getName
();
$name
=
$param
->
getName
();
if
(
isset
(
$params
[
$name
]))
{
if
(
isset
(
$params
[
$name
]))
if
(
$param
->
isArray
())
{
{
$ps
[]
=
is_array
(
$params
[
$name
])
?
$params
[
$name
]
:
array
(
$params
[
$name
]);
if
(
$param
->
isArray
())
}
elseif
(
!
is_array
(
$params
[
$name
]))
{
$ps
[]
=
is_array
(
$params
[
$name
])
?
$params
[
$name
]
:
array
(
$params
[
$name
]);
$ps
[]
=
$params
[
$name
];
else
if
(
!
is_array
(
$params
[
$name
]))
}
else
{
$ps
[]
=
$params
[
$name
];
else
return
false
;
return
false
;
}
}
else
if
(
$param
->
isDefaultValueAvailable
())
}
elseif
(
$param
->
isDefaultValueAvailable
())
{
$ps
[]
=
$param
->
getDefaultValue
();
$ps
[]
=
$param
->
getDefaultValue
();
else
}
else
{
return
false
;
return
false
;
}
}
$method
->
invokeArgs
(
$object
,
$ps
);
}
return
tru
e
;
return
fals
e
;
}
}
}
}
framework/base/Controller.php
View file @
1db738ef
...
@@ -221,7 +221,7 @@ abstract class Controller extends Component implements Initable
...
@@ -221,7 +221,7 @@ abstract class Controller extends Component implements Initable
* Runs an action with the specified filters.
* Runs an action with the specified filters.
* A filter chain will be created based on the specified filters
* A filter chain will be created based on the specified filters
* and the action will be executed then.
* and the action will be executed then.
* @param
C
Action $action the action to be executed.
* @param Action $action the action to be executed.
* @param array $filters list of filters to be applied to the action.
* @param array $filters list of filters to be applied to the action.
* @see filters
* @see filters
* @see createAction
* @see createAction
...
@@ -245,18 +245,18 @@ abstract class Controller extends Component implements Initable
...
@@ -245,18 +245,18 @@ abstract class Controller extends Component implements Initable
* Runs the action after passing through all filters.
* Runs the action after passing through all filters.
* This method is invoked by {@link runActionWithFilters} after all possible filters have been executed
* This method is invoked by {@link runActionWithFilters} after all possible filters have been executed
* and the action starts to run.
* and the action starts to run.
* @param
C
Action $action action to run
* @param Action $action action to run
*/
*/
public
function
runAction
(
$action
)
public
function
runAction
(
$action
)
{
{
$priorAction
=
$this
->
_action
;
$priorAction
=
$this
->
_action
;
$this
->
_action
=
$action
;
$this
->
_action
=
$action
;
if
(
$this
->
beforeAction
(
$action
))
{
if
(
$this
->
beforeAction
(
$action
))
{
if
(
$action
->
runWithParams
(
$this
->
getActionParams
())
===
false
)
{
$params
=
$action
->
normalizeParams
(
$this
->
getActionParams
());
if
(
$params
===
false
)
{
$this
->
invalidActionParams
(
$action
);
$this
->
invalidActionParams
(
$action
);
}
}
else
{
else
call_user_func_array
(
array
(
$action
,
'run'
),
$params
);
{
$this
->
afterAction
(
$action
);
$this
->
afterAction
(
$action
);
}
}
}
}
...
@@ -265,25 +265,25 @@ abstract class Controller extends Component implements Initable
...
@@ -265,25 +265,25 @@ abstract class Controller extends Component implements Initable
/**
/**
* Returns the request parameters that will be used for action parameter binding.
* Returns the request parameters that will be used for action parameter binding.
*
By default, this method will return $_GET. You may override this method if you
*
Default implementation simply returns an empty array.
*
want to use other request parameters (e.g. $_GET+$_POST).
*
Child classes may override this method to customize the parameters to be provided
*
@return array the request parameters to be used for action parameter binding
*
for action parameter binding (e.g. `$_GET`).
* @
since 1.1.7
* @
return array the request parameters (name-value pairs) to be used for action parameter binding
*/
*/
public
function
getActionParams
()
public
function
getActionParams
()
{
{
return
$_GET
;
return
array
()
;
}
}
/**
/**
* This method is invoked when the request parameters do not satisfy the requirement of the specified action.
* This method is invoked when the request parameters do not satisfy the requirement of the specified action.
* The default implementation will throw a 400 HTTP exception.
* The default implementation will throw a 400 HTTP exception.
* @param
C
Action $action the action being executed
* @param Action $action the action being executed
* @
since 1.1.7
* @
throws HttpException a 400 HTTP exception
*/
*/
public
function
invalidActionParams
(
$action
)
public
function
invalidActionParams
(
$action
)
{
{
throw
new
CHttpException
(
400
,
Yii
::
t
(
'yii'
,
'Your request is invalid.'
));
throw
new
HttpException
(
400
,
\
Yii
::
t
(
'yii'
,
'Your request is invalid.'
));
}
}
/**
/**
...
@@ -291,7 +291,7 @@ abstract class Controller extends Component implements Initable
...
@@ -291,7 +291,7 @@ abstract class Controller extends Component implements Initable
* The action can be either an inline action or an object.
* The action can be either an inline action or an object.
* The latter is created by looking up the action map specified in {@link actions}.
* The latter is created by looking up the action map specified in {@link actions}.
* @param string $actionID ID of the action. If empty, the {@link defaultAction default action} will be used.
* @param string $actionID ID of the action. If empty, the {@link defaultAction default action} will be used.
* @return
C
Action the action instance, null if the action does not exist.
* @return Action the action instance, null if the action does not exist.
* @see actions
* @see actions
*/
*/
public
function
createAction
(
$actionID
)
public
function
createAction
(
$actionID
)
...
@@ -322,7 +322,7 @@ abstract class Controller extends Component implements Initable
...
@@ -322,7 +322,7 @@ abstract class Controller extends Component implements Initable
* @param string $actionID the action ID that has its prefix stripped off
* @param string $actionID the action ID that has its prefix stripped off
* @param string $requestActionID the originally requested action ID
* @param string $requestActionID the originally requested action ID
* @param array $config the action configuration that should be applied on top of the configuration specified in the map
* @param array $config the action configuration that should be applied on top of the configuration specified in the map
* @return
C
Action the action instance, null if the action does not exist.
* @return Action the action instance, null if the action does not exist.
*/
*/
protected
function
createActionFromMap
(
$actionMap
,
$actionID
,
$requestActionID
,
$config
=
array
())
protected
function
createActionFromMap
(
$actionMap
,
$actionID
,
$requestActionID
,
$config
=
array
())
{
{
...
@@ -386,7 +386,7 @@ abstract class Controller extends Component implements Initable
...
@@ -386,7 +386,7 @@ abstract class Controller extends Component implements Initable
}
}
/**
/**
* @return
C
Action the action currently being executed, null if no active action.
* @return Action the action currently being executed, null if no active action.
*/
*/
public
function
getAction
()
public
function
getAction
()
{
{
...
@@ -394,7 +394,7 @@ abstract class Controller extends Component implements Initable
...
@@ -394,7 +394,7 @@ abstract class Controller extends Component implements Initable
}
}
/**
/**
* @param
C
Action $value the action currently being executed.
* @param Action $value the action currently being executed.
*/
*/
public
function
setAction
(
$value
)
public
function
setAction
(
$value
)
{
{
...
@@ -471,7 +471,7 @@ abstract class Controller extends Component implements Initable
...
@@ -471,7 +471,7 @@ abstract class Controller extends Component implements Initable
/**
/**
* This method is invoked right before an action is to be executed (after all possible filters.)
* This method is invoked right before an action is to be executed (after all possible filters.)
* You may override this method to do last-minute preparation for the action.
* You may override this method to do last-minute preparation for the action.
* @param
C
Action $action the action to be executed.
* @param Action $action the action to be executed.
* @return boolean whether the action should be executed.
* @return boolean whether the action should be executed.
*/
*/
protected
function
beforeAction
(
$action
)
protected
function
beforeAction
(
$action
)
...
@@ -482,7 +482,7 @@ abstract class Controller extends Component implements Initable
...
@@ -482,7 +482,7 @@ abstract class Controller extends Component implements Initable
/**
/**
* This method is invoked right after an action is executed.
* This method is invoked right after an action is executed.
* You may override this method to do some postprocessing for the action.
* You may override this method to do some postprocessing for the action.
* @param
C
Action $action the action just executed.
* @param Action $action the action just executed.
*/
*/
protected
function
afterAction
(
$action
)
protected
function
afterAction
(
$action
)
{
{
...
...
framework/base/InlineAction.php
View file @
1db738ef
<?php
<?php
/**
/**
*
C
InlineAction class file.
* InlineAction class file.
*
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @link http://www.yiiframework.com/
* @link http://www.yiiframework.com/
* @copyright Copyright © 2008-201
1
Yii Software LLC
* @copyright Copyright © 2008-201
2
Yii Software LLC
* @license http://www.yiiframework.com/license/
* @license http://www.yiiframework.com/license/
*/
*/
namespace
yii\base
;
/**
/**
*
C
InlineAction represents an action that is defined as a controller method.
* InlineAction represents an action that is defined as a controller method.
*
*
* The method name is like 'actionXYZ' where 'XYZ' stands for the action name.
* The method name is like 'actionXYZ' where 'XYZ' stands for the action name.
*
*
* @author Qiang Xue <qiang.xue@gmail.com>
* @author Qiang Xue <qiang.xue@gmail.com>
* @version $Id$
* @since 2.0
* @package system.web.actions
* @since 1.0
*/
*/
class
CInlineAction
extends
C
Action
class
InlineAction
extends
Action
{
{
/**
/**
* Runs the action.
* Runs the action.
* Th
e action method defined in the controller is invoked
.
* Th
is method is invoked by the controller to run the action
.
*
This method is required by {@link CAction}.
*
@param array $params the input parameters
*/
*/
public
function
run
()
public
function
run
(
$params
)
{
{
$method
=
'action'
.
$this
->
getId
();
call_user_func_array
(
array
(
$this
->
controller
,
'action'
.
$this
->
id
),
$params
);
$this
->
getController
()
->
$method
();
}
}
/**
/**
* Runs the action with the supplied request parameters.
* Extracts the input parameters according to the signature of the controller action method.
* This method is internally called by {@link CController::runAction()}.
* This method is invoked by controller when it attempts to run the action
* @param array $params the request parameters (name=>value)
* with the user supplied parameters.
* @return boolean whether the request parameters are valid
* @param array $params the parameters in name-value pairs
* @since 1.1.7
* @return array|boolean the extracted parameters in the order as declared in the controller action method.
* False is returned if the input parameters do not follow the method declaration.
*/
*/
public
function
runWith
Params
(
$params
)
public
function
normalize
Params
(
$params
)
{
{
$method
Name
=
'action'
.
$this
->
getId
(
);
$method
=
new
\ReflectionMethod
(
$this
->
controller
,
'action'
.
$this
->
id
);
$
controller
=
$this
->
getController
(
);
$
params
=
$this
->
normalizeParams
(
$method
,
$params
);
$method
=
new
ReflectionMethod
(
$controller
,
$methodName
);
if
(
$params
!==
false
)
{
if
(
$method
->
getNumberOfParameters
()
>
0
)
return
array
(
$params
);
return
$this
->
runWithParamsInternal
(
$controller
,
$method
,
$params
);
}
else
{
else
return
false
;
return
$controller
->
$methodName
();
}
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment