2015-02-20 3 views
4

Могу ли я установить значение по умолчанию для POST/GET данные, если он пустой/ложь, что-то вродеCodeIgniter POST/GET Значение по умолчанию

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

?

Так что не надо кодировать как

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

Спасибо.

+0

если вы тусклый t для «value-if-falsy» как «», тогда он автоматически сделает это –

+0

, иначе вы можете сделать это как раз для сокращения, $ a = $ this-> input-> post ("varname"); $ А = (пусто ($ а)) "значение-если-falsy": $ а; –

+0

, если вы сохраняете значение в db, вы можете установить значение по умолчанию там –

ответ

3

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

В приложении/сердцевиной создания 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") 
+0

Я уже создал собственный класс MY_Input, если нет встроенного способа решения этой проблемы. Благодарю. – maspai

+0

Почему вы переписываете содержимое метода по умолчанию и не называете 'parent :: post ($ index, $ xss_clean)'? – fabsn

+0

@fabsn Только для образовательной цели, если я могу сказать так. Но да, вы абсолютно правы, мы можем просто провести тест на 'parent :: post()' и вернуть параметры по умолчанию, если false. – AdrienXL

1

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

Просто создайте файл application/core/MY_Input.php и вызвать родительский метод (вы можете найти эти методы внутри системной папки 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"); 
0

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

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; 
} 
Смежные вопросы