Codeigniter - настроить enable_query_strings и form_open - PullRequest
3 голосов
/ 13 марта 2011

Я хочу, чтобы пользователь мог запрашивать строки таким способом.Domain.com/controller/function?param=5&otherparam=10

В моем конфигурационном файле у меня есть

$config['base_url'] = 'http://localhost:8888/test-sites/domain.com/public_html';
$config['index_page'] = '';
$config['uri_protocol'] = 'PATH_INFO';
$config['enable_query_strings'] = TRUE;

Проблема, которую я получаю, заключается в том, что form_open автоматически добавляет знак вопроса (?) В мой URL.

Так что, если я скажу:

echo form_open('account/login');

, он выплевывает: http://localhost:8888/test-sites/domain.com/public_html/?account/login

Обратите внимание на знак вопроса, добавленный прямо перед "account".

Как я могу это исправить?

Любая помощь будет принята с благодарностью!

Ответы [ 3 ]

2 голосов
/ 16 марта 2011

Источник вашей проблемы находится в файле Core Config.php, где находится класс CI_Config.Метод site_url () используется помощником формы, когда вы пытаетесь использовать функцию form_open.Решение было бы переопределить этот класс своим собственным.Если вы используете CI <2.0, то создайте свой расширенный класс в application / library / MY_Config.php, в противном случае, если CI> = 2.0, тогда ваш расширенный класс перейдет в application / core / MY_Config.php.Затем вам нужно переопределить метод site_url ().

class MY_Config extends CI_Config
{
   function __construct()
   {
      parent::CI_Config();
   }

   public function site_url($uri='')
   {
      //Copy the method from the parent class here:
      if ($uri == '')
      {
         if ($this->item('base_url') == '')
     {
        return $this->item('index_page');
     }
     else
     {
        return $this->slash_item('base_url').$this->item('index_page');
     }
      }

      if ($this->item('enable_query_strings') == FALSE)
      {
         //This is when query strings are disabled
      }
      else
      {
         if (is_array($uri))
     {
        $i = 0;
        $str = '';
        foreach ($uri as $key => $val)
        {
           $prefix = ($i == 0) ? '' : '&';
           $str .= $prefix.$key.'='.$val;
           $i++;
        }
            $uri = $str;
         }
         if ($this->item('base_url') == '')
     {
            //You need to remove the "?" from here if your $config['base_url']==''
        //return $this->item('index_page').'?'.$uri;
            return $this->item('index_page').$uri;
     }
     else
     {
            //Or remove it here if your $config['base_url'] != ''
        //return $this->slash_item('base_url').$this->item('index_page').'?'.$uri;
            return $this->slash_item('base_url').$this->item('index_page).$uri;
     }
      }
   }
}

Надеюсь, это поможет, и я думаю, что вы используете CI 2.0, который не был официально выпущен, он был удален в официальной версии CI 2.0

2 голосов
/ 30 декабря 2011

Проще всего установить следующий файл в config.php

$config['enable_query_strings'] = FALSE;

Было ли решение в моем случае.

1 голос
/ 14 марта 2011

Если вы хотите использовать строку запроса в своей структуре url, вам следует вручную ввести свою структуру url в следующем порядке:

<domain.com>?c={controller}&m={function}&param1={val}&param2={val}

в действии соответствующего контроллера вы должны получить параметр как$_GET['param1']

Ваш код теперь должен выглядеть следующим образом

form_open(c=account&m=login&param1=val)

Пожалуйста, дайте мне знать, если он не работает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...