CodeIgniter POST/получить значение по умолчанию

могу ли я установить значение по умолчанию для POST / GET data, если оно пустое / false, что-то вроде

$this->input->post("varname", "value-if-falsy")

?

поэтому мне не нужно кодировать как

$a = $this->input->post("varname") ? 
     $this->input->post("varname") :
     "value-if-falsy"

спасибо.

3 ответов


вы должны переопределить поведение по умолчанию.

в application/core создайте MY_Input.в PHP

class MY_Input extends CI_Input
{
        function post($index = NULL, $xss_clean = FALSE, $default_value = NULL)
        {
            // Check if a field has been provided
            if ($index === NULL AND ! empty($_POST))
            {
                $post = array();

                // Loop through the full _POST array and return it
                foreach (array_keys($_POST) as $key)
                {
                    $post[$key] = $this->_fetch_from_array($_POST, $key, $xss_clean);
                }

                return $post;
            }

            $ret_val = $this->_fetch_from_array($_POST, $index, $xss_clean)
            if(!$ret_val)
                $ret_val = $default_value

            return $ret_val;
        }
}

и затем в вашем контроллере:

$this->input->post("varname", "", "value-if-falsy")

это работает для меня, я использовал трюк @AdrienXL.

просто создать свой application/core/MY_Input.php file и вызов родительского метода (вы можете найти эти методы внутри системной папки CodeIgniter system/core/Input.php:

<?php (defined('BASEPATH')) OR exit('No direct script access allowed');

class MY_Input extends CI_Input
{
    function post($index = NULL, $default_value = NULL, $xss_clean = FALSE)
    {
        $value = parent::post($index, $xss_clean);

        if(!$value)
            $value = $default_value;

        return $value;
    }

    function get($index = NULL, $default_value = NULL, $xss_clean = FALSE)
    {
        $value = parent::get($index, $xss_clean);

        if(!$value)
            $value = $default_value;

        return $value;
    }
}

Итак, при вызове метода передайте значение по умолчанию:

$variable = $this->input->post("varname", "value-if-falsy");

вы можете упростить блок кода, как показано ниже

public function post($index = NULL, $xss_clean = NULL, $default_value = NULL  )
{
    if( is_null( $value = $this->_fetch_from_array($_POST, $index, $xss_clean ) ) ){
        return $default_value;
    }
    return $value;
}