CakePHP отображает опубликованные данные формы - PullRequest
0 голосов
/ 23 марта 2012

Я новичок в cakephp и пытаюсь просто отобразить данные формы после их публикации. Я хотел бы напечатать что-то в «add.ctp», которое затем перенаправляет в «index.ctp», где должна отображаться только что набранная информация.

Причина, по которой я это делаю, заключается в том, что мне нравится выводить переменные и формы в разных местах в моей программе для целей отладки. Я склонен много работать с данными, которые необходимо преобразовать или манипулировать, поэтому мне нравится проверять и убедиться, что каждая часть выполняет свою работу правильно. Я новичок в CakePHP, поэтому я просто пытаюсь понять, как я могу это сделать.

Вот код для add.ctp, куда вводится информация.

View\Mysorts\add.ctp

<h1>Add Numbers</h1>
<?php
echo $this->Form->create('Mysort');
echo $this->Form->input('original');
echo $this->Form->end('Add Numbers');
?>

Вот моя функция в контроллере

Controller\MysortsController.php

<?php

class MysortsController extends AppController {
  public $helpers = array('Html', 'Form');

  public function index() {
         $this ->set('mysorts', $this->Mysort->find('all'));  

  } 

    public function add() {
        if($this->request->is('post')) {
        Configure::read();
        pr($this->data); //attempting to print posted information
        $this->redirect(array('action' => 'index'));
    }
 }

 function isempty(){
           $mysorts = $this->Mysort->find('all');
           $this->set('mysorts', $mysorts);
  }
}
?>

И, наконец, вот мой индексный файл, в котором я хотел бы отобразить опубликованную информацию.

View\Mysorts\index.ctp

<h1>Sorted Entries</h1>
<?php
 echo $this->Html->link("Add List", array('controller'=>'mysorts', 'action' => 'add'));
   if (!empty($mysorts)) {
  ?>
 <table>
   <tr>
       <th>ID</th>
       <th>Original</th>
       <th>Sorted</th>
   </tr>

  <?php  foreach ($mysorts as $mysort): ?>
         <tr>
             <td><?php echo $mysort['Mysort']['id']; ?></td>
             <td>
                 <?php echo $mysort['Mysort']['original']; ?>
             </td>
             <td> <?php echo $mysort['Mysort']['sorted']; ?>
             </td>
         </tr>
   <?php endforeach;
         } else {
        echo '<p>No results found!</p>';
        }
   ?>
 </table>

Ответы [ 3 ]

2 голосов
/ 25 марта 2012

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

  1. Вы не сохраняете данные, полученные при использовании метода «add». Это делается с помощью $ this-> ModelName-> save ($ data) , где ModelName - используемая модель (в вашем случае это должна быть MySort и $ data - опубликованные данные.

  2. Вы используете Cakephp2.x? Я так полагаю, потому что вы используете $ this-> request-> is ('post') , которого не было в 1.3, я думаю. Проблема в том, что опубликованные данные больше не хранятся в $ this-> data . Он находится в $ this-> request-> data .

  3. Не использовать pr () . Слишком «опасно» забывать что-то подобное в коде. Вместо этого используйте debug () . Вывод будет отключен, как только вы увидите константу DEBUG в Config / core.php в корневом каталоге вашего приложения в 0 .

  4. Вызов метода redirect () в контроллере генерирует реальное перенаправление 301. Это означает, что старый вывод сбрасывается и теряется. Это и пункт 1 проясняет, почему вы ничего не видите. Ничего не сохраняется, и, прежде чем вы увидите вывод pr (), ваш браузер будет перенаправлен. Если вы хотите что-то отладить, используйте exit; впоследствии, чтобы убедиться, что вы не пропустите вывод. Иногда вам это не нужно, но если вы не можете найти свой вывод, используйте его;)

Надеюсь, это поможет вам.

Привет

func0der

0 голосов
/ 24 марта 2012

Я не понимаю, в чем ваша цель, пытаясь что-то напечатать, а затем сразу же перенаправить?Вы не увидите его при перенаправлении.

В любом случае, поскольку ваша форма, вероятно, не состоит из представления фактической модели, вы можете захотеть проверить переменную $this->params['form'] в отличие от обычной $this->data что вы будете использовать в FormHelper.

Кроме того, вы понимаете, что пропускаете закрывающее} в вашем Controller \ MysortsController.php?Закрывает функцию add (), но не класс ...

0 голосов
/ 24 марта 2012

Может быть, вам нужно что-то вроде этого.Для вашего add.ctp вы определяете действие, которое вы хотите опубликовать.

<h1>Add Numbers</h1>
<?php
echo $this->Form->create(array('action' => 'view'));
echo $this->Form->input('original');
echo $this->Form->end('Add Numbers');
?>

Для вашего контроллера Вам нужно установить переменную, которую вы хотите видеть,

public function add() {

}

public function index(){
    if($this->request->is('post')) {
        $this->set('mysorts', $this->request->data);
    }

}

И яЯ не уверен, имеет ли смысл то, что я вижу в вашем index.ctp.

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