2012-03-23 3 views
0

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

Причина, по которой я делаю это, заключается в том, что мне нравится эхо мои переменные и формы в разных местах моей программы для целей отладки. Я стараюсь много работать с данными, которые нужно преобразовать или манипулировать, поэтому я хотел бы проверить и убедиться, что каждая часть выполняет свою работу правильно. Я новичок в 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> 
+0

Где функция индекса контроллера? Вам нужно будет установить mysort для вашего index.ctp. – pbond

+0

Я думал, что функция должна была разделить имя страницы просмотра. Моя функция добавляется, а представление - add.ctp. Должно ли имя формы (в представлении) также иметь имя функции? – user1104854

ответ

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 имеет смысл.

+0

У меня установлен мой индекс, поэтому, если в моей таблице нет данных, он отображает «Результаты не найдены». В противном случае он отображает результаты. Я сделал что-то неправильно? Он делает именно то, что я объяснил, хотя я мог нарушить структуру MVC. – user1104854

0

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

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

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

+0

Причина, по которой я делаю это, состоит в том, что я, как правило, выполняю множество вычислений и манипуляций с данными (с обычным php), и мне нравится повторять текущее состояние переменных и входов в процессах для целей отладки. Я новичок в cakephp и просто пытаюсь выяснить основы отображения данных и общего потока. – user1104854

2

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

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

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

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

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

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

Приветствия

func0der

+0

Код, который я опубликовал, работает (насколько показано в таблице при наличии данных), однако мой вопрос касается потока информации. Если вы посмотрите в моем файле index.ctp, я проверю, пуст ли $ mysorts, который находится в MysortsController.php. Разве это нарушает поток MVC, потому что я использую представление, чтобы что-то проверить в контроллере? – user1104854

+0

Он не разбивает шаблон MVC, если вы проверяете, является ли var пустым в представлении. Вы должны это избежать предупреждений php. – func0der

Смежные вопросы