$ _post в контроллере Kohana - PullRequest
       50

$ _post в контроллере Kohana

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

Мне было интересно, смогу ли я получить переменную с помощью $ _post в контроллере Kohana, если контроллер не «контролирует» форму.

Итак, если я вставлю в представление что-то вроде:

 <form name="ordering" id="ordering" method="post" action="">
 <input type="hidden" id="ordering" value="0">  
 <select id="ordering" name="ordering">   
....

в контроллер я положил:

        $ordering = $_POST['ordering']; 

но выдает ошибку

или

       if ($this->request->method == 'POST') {    
        $ordering = $_POST['ordering'];
    }

но в этом случае он никогда не попадет туда (при этом наборе кода).

поэтому мой вопрос: как я могу получить в контроллере переменную $ _post, если контроллер не обрабатывает только форму? спасибо!

Ответы [ 3 ]

5 голосов
/ 06 марта 2011

Кохана 3,0:

if ($_POST)
{
$ordering = arr::get($_POST, 'ordering');
...

Кохана 3.1:

if ($ordering = $this->request->post('ordering')) // or just $this->request->post()
{
...
1 голос
/ 06 марта 2011

ID уникальны!Используйте присвоенные классом или разные идентификаторы.

Ваша форма и выбранные оба имеют порядок, замените один на другой, например:

<form name="ordering_form" id="ordering_form" method="post" action="">
<input type="hidden" id="ordering_input" value="0">  
<select id="ordering" name="ordering">
...
</select>
</form>

и в контроллере Kohana:

if( isset( $_POST['ordering'] ) )
{
    $ordering = $_POST['ordering'];
}

это должно работать, потому что я не могу найти любую другую ошибку

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

PHP выдаст уведомление, если вы попытаетесь получить доступ к неопределенному элементу массива.Поэтому, если форма «заказа» никогда не была отправлена, попытка доступа к $ _POST ['ordering]] приведет к

PHP Notice:  Undefined index: ordering in ...

Класс Arr Коханы предоставляет хороший вспомогательный метод, чтобы обойти это.

Если вы позвоните

$ordering = Arr::get($_POST, 'ordering', 0);

, он получит значение порядка из переменной post.Если $ _POST ['ordering'] не установлен, он вернет третий параметр.Затем вы можете попробовать if ($ordering) ...

Это полезно для массивов $ _POST / $ _ GET или для любой функции, которая принимает массивы - она ​​позволяет вам кратко указать резервное поведение, а не тестировать с помощью isset.

Одним из преимуществ Kohana является то, что исходный код имеет тенденцию быть очень чистым и легким для понимания (что приятно, поскольку документация скудна). Я бы посоветовал вам проверить класс Kohana_Arr и посмотретьпо доступным методам!

...