使用CodeIgniter通过查询字符串自定义URI路由?

时间:2014-02-06 17:44:48

标签: php codeigniter codeigniter-2 codeigniter-url codeigniter-routing

我希望使用CodeIgniter框架创建自定义路由。我试图像这样制作网址:

http://localhost/accounts/Auth.dll?signin

到目前为止,我已尝试将以下内容添加到我的routes.php配置文件中:

$route['accounts/Auth.dll?signin'] = "accounts/signin";

但正如你猜测的那样,它不起作用。我也试过逃避这样的角色:

$route['accounts/Auth\.dll\?signin'] = "accounts/signin";

这也不起作用。我也尝试过包括前导斜杠和尾随斜杠......但是也没用。任何人都知道什么可以解决我的问题?

2 个答案:

答案 0 :(得分:3)

我强烈建议您使用SEF路由。

但是,如果由于任何原因你不想,你可以检查Accounts控制器中的查询字符串,然后调用正确< strong>方法,如下:

<强>路由器:

$route['accounts/Auth.dll'] = "accounts";

<强>控制器:

class Accounts extends CI_Controller
{
    public function __construct()
    {
        # Call the CI_Controller constructor
        parent::__construct();

        # Fetch the query string
        if ($method = $this->input->server('QUERY_STRING', TRUE)) {
            # Check whether the method exists
            if (method_exists($this, $method)) {
                # Invoke the method
                call_user_func(array($this, $method));
            }
        }
    }

    protected function signin()
    {
        # Your logic here
    }
}

这允许您自动通过查询字符串调用方法。

答案 1 :(得分:0)

我不确定,在routes.php配置中使用GET-params是可以的。 试试这样:

<强> routes.php文件

$route['accounts/Auth.dll'] = "accounts/index";

<强> accounts.php

public function index() {
     if ($this->input->get('signin') != false) {
          $this->signin();
     }
}

private function signin() {
    // some code
}

但是,对我而言,这是不好的方式。

我建议您使用其他路由:

/accounts/Auth.dll/signin

等等。