因为默认情况下yii是从URL中取得路由信息的,在命令行下,就不能正常运行MVC结构,我作一个补充,使其可在命令行下运行MVC。
这样,我们的程序不作任何修改即可在命令行和WEB下运行,参照代码的注释部分安装即可使用。
<?php
/**
* Yii CLI Controller/Action parse support
* @author zhangxugg@163.com 2013-9-16
*
* @package protected/components/cliUrlManager.php
* @todo config/main.php =>
* 'components'=> array(
* 'urlManager' => array(
'class' => 'cliUrlManager',
),
* ),
*
* thus, in CLI enviroment: php index.php
*/
class cliUrlManager extends CUrlManager {
public function parseUrl($request) {
if(isset($_SERVER['HTTP_HOST'])) {
return parent::parseUrl($request);
}
if(!isset($_SERVER['argv'][1])) {
echo "YII CLI Interface Usage:\n";
echo $_SERVER['argv'][0]." controllerId/ActionId param1=val1 param2=val2 ...\n\n";
echo "above params parsed to:\n\$_GET=array(\n\tparam1=>val1,\n\tparam2=>val2\n);";
exit;
}
$route = $_SERVER['argv'][1] ;
$parts = array();
foreach(array_slice($_SERVER['argv'],2) as $ps) {
if(preg_match("/(\w+?)=(.+)/",$ps,$parts)) {
$_GET[$parts[1]] = $parts[2];
}
}
return $route ;
}
}