Php 如何在codeigniter中获得没有MY_控制器和Ci_控制器方法的所有控制器和方法列表?
在codeigniter中,如果没有MY_控制器和Ci_控制器方法,如何获取所有控制器和方法的列表 救救我Php 如何在codeigniter中获得没有MY_控制器和Ci_控制器方法的所有控制器和方法列表?,php,codeigniter,Php,Codeigniter,在codeigniter中,如果没有MY_控制器和Ci_控制器方法,如何获取所有控制器和方法的列表 救救我 $this->load->helper('file'); $controllers = get_filenames( APPPATH . 'controllers/' ); foreach( $controllers as $k => $v ) {
$this->load->helper('file');
$controllers = get_filenames( APPPATH . 'controllers/' );
foreach( $controllers as $k => $v )
{
if( strpos( $v, '.php' ) === FALSE)
{
unset( $controllers[$k] );
}
}
echo '<ul>';
foreach( $controllers as $controller )
{
echo '<li>' . $controller . '<ul>';
include_once APPPATH . 'controllers/' . $controller;
$methods = get_class_methods( str_replace( '.php', '', $controller ) );
foreach( $methods as $method )
{
echo '<li>' . $method . '</li>';
}
echo '</ul></li>';
}
echo '</ul>';
$this->load->helper('file');
$controllers=get_文件名(APPPATH.controllers/);
foreach($k=>v的控制器)
{
if(strpos($v,'.php')==FALSE)
{
未设置($k]);
}
}
回声“”;
foreach($controller作为$controller)
{
回显“- ”.$controller.“
”;
包括_once APPPATH.“controllers/”.$controller;
$methods=get_class_方法(str_replace('.php','$controller));
foreach($methods作为$method)
{
回显“- ”.$method.“
”;
}
回音“
”;
}
回声“
”;
类不是从CI继承的控制器无法访问codeigniter函数
您必须使用get_instance()
例如
我没有正确理解你的问题。但我想你想做的是, 您希望获取应用程序/控制器目录中控制器的所有方法和类的名称。 但是,如果这些类是从application/core/MY_Controller中的MY_Controller继承(扩展)的,那么它也会出现在列表中。你想避免这样 如果是这种情况,请执行以下操作: 在第二个循环之前,即第行
foreach($controllers as$controller)
添加以下代码
include_once APPPATH . 'core/MY_Controller.php';
$MY_Ci_methods = get_class_methods("MY_Controller");
在第二个foreach循环之前,即第行foreach($methods as$method){
添加这一行
$methods = array_diff($methods, $MY_Ci_methods);
希望这能解决你的问题
完整代码:
$this->load->helper('file');
$controllers = get_filenames( APPPATH . 'controllers/' );
foreach( $controllers as $k => $v )
{
if( strpos( $v, '.php' ) === FALSE)
{
unset( $controllers[$k] );
}
}
echo '<ul>';
// add these 2 line of code.
include_once APPPATH . 'core/MY_Controller.php';
$MY_Ci_methods = get_class_methods("MY_Controller");
foreach( $controllers as $controller )
{
echo '<li>' . $controller . '<ul>';
include_once APPPATH . 'controllers/' . $controller;
$methods = get_class_methods( str_replace( '.php', '', $controller ) );
// add this line also
$methods = array_diff($methods, $MY_Ci_methods);
foreach( $methods as $method )
{
echo '<li>' . $method . '</li>';
}
echo '</ul></li>';
}
echo '</ul>';`
$this->load->helper('file');
$controllers=get_文件名(APPPATH.controllers/);
foreach($k=>v的控制器)
{
if(strpos($v,'.php')==FALSE)
{
未设置($k]);
}
}
回声“”;
//添加这两行代码。
包括_once APPPATH.'core/MY_Controller.php';
$MY_Ci_methods=获取类方法(“MY_控制器”);
foreach($controller作为$controller)
{
回显“- ”.$controller.“
”;
包括_once APPPATH.“controllers/”.$controller;
$methods=get_class_方法(str_replace('.php','$controller));
//再加上这一行
$methods=array_diff($methods,$MY_Ci_methods);
foreach($methods作为$method)
{
回显“- ”.$method.“
”;
}
回音“
”;
}
回声“
”`
可能重复您没有提到的问题此代码显示了使用CI_控制器和MY_控制器的所有方法,并重复。我只需要控制器文件夹控制器名称和方法。
$this->load->helper('file');
$controllers = get_filenames( APPPATH . 'controllers/' );
foreach( $controllers as $k => $v )
{
if( strpos( $v, '.php' ) === FALSE)
{
unset( $controllers[$k] );
}
}
echo '<ul>';
// add these 2 line of code.
include_once APPPATH . 'core/MY_Controller.php';
$MY_Ci_methods = get_class_methods("MY_Controller");
foreach( $controllers as $controller )
{
echo '<li>' . $controller . '<ul>';
include_once APPPATH . 'controllers/' . $controller;
$methods = get_class_methods( str_replace( '.php', '', $controller ) );
// add this line also
$methods = array_diff($methods, $MY_Ci_methods);
foreach( $methods as $method )
{
echo '<li>' . $method . '</li>';
}
echo '</ul></li>';
}
echo '</ul>';`