我有以下网址:
如何从这些URL获取控制器名称,动作名称。我是CodeIgniter新手。是否有任何辅助功能来获取此信息
例如:
$params = helper_function( current_url() )
哪里$params
变得像
array (
'controller' => 'system/settings',
'action' => 'edit',
'...'=>'...'
)
我有以下网址:
如何从这些URL获取控制器名称,动作名称。我是CodeIgniter新手。是否有任何辅助功能来获取此信息
例如:
$params = helper_function( current_url() )
哪里$params
变得像
array (
'controller' => 'system/settings',
'action' => 'edit',
'...'=>'...'
)
Answers:
您可以使用URI类:
$this->uri->segment(n); // n=1 for controller, n=2 for method, etc
有人告诉我以下工作,但是目前无法测试:
$this->router->fetch_class();
$this->router->fetch_method();
而不是使用URI段,您应该这样做:
$this->router->fetch_class(); // class = controller
$this->router->fetch_method();
这样一来,即使您位于路由URL的后面,子域等中,您也知道始终使用正确的值。
modules::run('module/controller/action')
。它仅显示已加载页面的路由器信息。有什么办法可以克服这个问题?
$this->router
返回返回代码运行的类,但不会返回被替代覆盖的实际路由器。根据您想做什么,两个答案都非常有用。
$this->router->class
和 $this->router->method
代替
该方法已弃用。
$this->router->fetch_class();
$this->router->fetch_method();
您可以改为访问属性。
$this->router->class;
$this->router->method;
URI路由方法fetch_directory(),fetch_class(),fetch_method()
有了属性
CI_Router::$directory
,CI_Router::$class
并且CI_Router::$method
成为公共属性,并且 它们各自fetch_*()
不再为返回属性做任何其他事情-保留它们没有任何意义。这些都是内部的,未记录的方法,但是为了避免向后兼容,以防万一,我们现在选择不推荐使用它们。如果您中的某些人已经利用它们,那么现在您可以访问属性:
$this->router->directory; $this->router->class; $this->router->method;
其他方式
$this->router->class
作为补充
$this -> router -> fetch_module(); //Module Name if you are using HMVC Component
fetch_module()
在CI 2.1.2中,此呼叫对我不起作用。在/system/router.php文件中找不到它。
更新资料
答案是在2015年添加的,现在不推荐使用以下方法
$this->router->fetch_class(); in favour of $this->router->class;
$this->router->fetch_method(); in favour of $this->router->method;
嗨,您应该使用以下方法
$this->router->fetch_class(); // class = controller
$this->router->fetch_method(); // action
为此目的,但要使用此功能,您需要从扩展钩子,CI_Controller
并且它就像一个吊饰一样工作,您不应该使用uri段
在班级或库中的任何地方使用此代码
$current_url =& get_instance(); // get a reference to CodeIgniter
$current_url->router->fetch_class(); // for Class name or controller
$current_url->router->fetch_method(); // for method name
控制器类不起作用。
所以我建议您使用以下脚本
global $argv;
if(is_array($argv)){
$action = $argv[1];
$method = $argv[2];
}else{
$request_uri = $_SERVER['REQUEST_URI'];
$pattern = "/.*?\/index\.php\/(.*?)\/(.*?)$/";
preg_match($pattern, $request_uri, $params);
$action = $params[1];
$method = $params[2];
}