cakephp显示发布的表单数据

时间:2012-03-23 17:29:11

标签: php forms cakephp post

我是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 个答案:

答案 0 :(得分:2)

如果您发布的代码与您正在使用的代码完全无法合作。

  1. 使用“添加”方法时,不保存收到的数据。这是通过 $ this-&gt; ModelName-&gt; save($ data)完成的,其中 ModelName 是要使用的模型(在您的情况下应该是 MySort $ data 是发布的数据。

  2. 您使用的是Cakephp2.x吗?我认为是因为你正在使用 $ this-&gt; request-&gt; is('post'),我认为这不在1.3中。问题是,发布的数据不再存储在 $ this-&gt;数据中。它位于 $ this-&gt; request-&gt; data 中。

  3. 请勿使用 pr()。在代码中忘记类似的东西太“危险”了。请改用 debug()。一旦您在应用程序根目录中的 Config / core.php 中看到 DEBUG 常量 0 ,输出就会被禁用。

  4. 在控制器中调用 redirect()方法会生成真正的301重定向。这意味着旧的输出被丢弃和丢失。那点和第1点清楚地说明了为什么你看不到任何东西。没有任何内容保存,在您看到pr()的输出之前,您的浏览器会被重定向。如果你想调试一些东西,请使用退出; ,以确保你不会错过输出。有时您不需要它,但如果找不到输出,请使用它;)

  5. 希望这会对你有所帮助。

    问候

    func0der

答案 1 :(得分:0)

也许你需要的是这样的东西。 对于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中看到的内容是否合理。

答案 2 :(得分:0)

我不明白你在尝试打印某些内容然后立即重定向时的意思是什么?重定向时你不会看到它。

无论如何,由于您的表单可能不包含实际模型的表示,您可能需要检查$this->params['form']变量而不是您将在FormHelper中使用的普通$this->data

另外,你是否意识到你在Controller \ MysortsController.php中缺少关闭}?它关闭了add()函数,但没有关闭类......