如何在codeigniter中获取没有MY_controller和Ci_controller方法的所有控制器和方法列表???
帮帮我!!!!!!
$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>';
答案 0 :(得分:0)
不从CI_Controller继承的类无法访问codeigniter函数
您必须使用get_instance();
例如,
Class User
{
function index()
{
$CI =& get_instance();
$CI->load->library('database');
$CI->load->view('something');
/*
this above code is equal to
$this->load->library('database');
$this->load->view('something');
*/
}
}
答案 1 :(得分:0)
我没有正确理解你的问题。但我想你想做的是, 您希望在应用程序/控制器目录中获取控制器的方法和类的所有名称。 但是如果这些类是从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( $methods as $method ){
之前的第二个foreach循环之前添加此行
$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>';`