在cakephp中添加功能突然停止工作

时间:2014-10-23 15:48:12

标签: php cakephp

我是cakePHP的新手,所以我可能会遗漏一些明显的东西。

我有一个正在运行并保存到数据库的添加表单,然后突然停止了。我没想到我添加了任何重要的东西,大多只是造型的东西......不幸的是我的最后一次备份是在我完成添加功能之前,所以我没有办法回到它工作的时候。如果有人可以看一看,看看我哪里出错,我将不胜感激!

我的任务模型:

App::uses('AuthComponent', 'Controller/Component');

class Task extends AppModel {

public $belongsTo = 'User';

public $validate = array(
    'task_name' => array(
        'custom' => array(
            'rule' => array('custom', '/^[a-z0-9 ]*$/i'),
            'required' => true,
            'message' => 'This field accepts letters and numbers only.'
        ),
        'maxLength' => array(
            'rule' => array('maxLength', 50),
            'message' => 'Task name cannot exceed 50 characters'
        )
    ),
    'frequency' => array(
        'alphaNumeric' => array(
            'rule' => 'alphaNumeric',
            'allowEmpty' => true
        )
    ),
    'day' => array(
        'alphaNumeric' => array(
            'rule' => 'alphaNumeric',
            'allowEmpty' => true
        )
    ),
    'user_id' => array(
        'numeric' => array(
            'rule' => 'numeric'
        )
    ),
    'month_type' => array(
        'alphaNumeric' => array(
            'rule' => 'alphaNumeric',
            'required' => false
        )
    ),
    'month_number' => array(
        'alphaNumeric' => array(
            'rule' => 'alphaNumeric',
            'required' => false
        )
    ),
    'month_day' => array(
        'alphaNumeric' => array(
            'rule' => 'alphaNumeric',
            'allowEmpty' => true
        )
    ),
    'day_number' => array(
        'alphaNumeric' => array(
            'rule' => 'alphaNumeric',
            'required' => false
        )
    )
);
}

我的TasksController文件中的add函数:

public function add() {
    if ($this->request->is('post')) {   
        $this->Task->create();
        if ($this->Task->save($this->request->data)) {
            $this->Session->setFlash(__('Task saved!'));
            $this->redirect(array('action' => 'index'));
        } 
        else {
            $this->Session->setFlash(__('The task could not be saved'));
        }   
    }
}

来自我的tasks / add.ctp文件的表单:

<?php 
echo $this->Form->create('Task',array('class' => 'taskForm'));
$userId = $this->Session->read('Auth.User.id');?>

<fieldset>
    <legend class="welcomeText"><?php echo __('Add a Task'); ?></legend>
    <?php 

        echo $this->Form->hidden('user_id', array('value' => $userId));

        echo $this->Form->input('task_name', array('label' => 'Task Name', 'maxLength' => 50));

        //set frequency
        echo "<p>How often should this task be done?</p>";
        $options = array('unset' => 'Decide Later','daily' => 'Daily','weekly' => 'Weekly','monthly' => 'Monthly');
        $attributes = array('value' => 'unset','separator' => '<br/>','class' => 'frequencyRadio','legend' => false);
        echo $this->Form->radio('frequency', $options, $attributes);

        //optional answers

        //if "weekly" is selected
        echo "<div id=\"weeklyRadio\" >";
        echo "<p>Set a day of the week for this task?</p>";
        $options = array('unset' => 'Decide later','monday' => 'Monday','tuesday' => 'Tuesday','wednesday' => 'Wednesday',
        'thursday' => 'Thursday','friday' => 'Friday','saturday' => 'Saturday','sunday' => 'Sunday');
        $attributes = array('value' => 'unset','separator' => '<br/>','class' => 'weeklyRadio','legend' => false);
        echo $this->Form->radio('day',$options,$attributes);
        echo "</div>"; 

        //if "monthly" is selected
        ?>
        <div id="monthlyRadio">
            <p>Schedule this task?</p>
            <input type="radio" name="data[Task][month_type]" id="TaskMonthTypeUnset" 
                value="unset" class="monthlyRadio" required="required" checked="checked" />
            <label for="TaskMonthTypeUnset">Decide later</label><br/>
            <input type="radio" name="data[Task][month_type]" id="TaskMonthTypeNumber" 
                value="number" class="monthlyRadio" required="required" />
            <label for="TaskMonthTypeNumber">
                <?php

                    echo "On the ";
                    $options = array(1 => '1st',2 => '2nd',3 => '3rd',4 => '4th',5 => '5th',6 => '6th',7 => '7th',8 => '8th',9 => '9th',
                            10 => '10th',11 => '11th',12 => '12th',13 => '13th',14 => '14th',15 => '15th', 16 => '16th',
                            17 => '17th',18 => '18th',19 => '19th',20 => '20th',21 => '21st',22 => '22nd',23 => '23rd',
                            24 => '24th',25 => '25th',26 => '26th',27 => '27th',28 => '28th',29 => '29th',30 => '30th',31 => '31st');                       
                    echo $this->Form->select('month_number',$options,array('value' => null));
                    echo " of the month";
                ?>
            </label><br/>
            <input type="radio" name="data[Task][month_type]" id="TaskMonthTypeDay" value="day" class="monthlyRadio" required="required" />
            <label for="TaskMonthTypeDay">
                <?php

                    echo "On the ";
                    $options = array(1 => '1st',2 => '2nd',3 => '3rd',4 => '4th',5 => '5th',6 => 'last');
                    echo $this->Form->select('day_number',$options,array('value' => null));
                    echo "&nbsp";
                    $options = array('monday' => 'Monday','tuesday' => 'Tuesday','wednesday' => 'Wednesday',
                            'thursday' => 'Thursday','friday' => 'Friday','saturday' => 'Saturday','sunday' => 'Sunday');
                    echo $this->Form->select('month_day',$options,array('value' => null));
                    echo " of the month";
                ?>
            </label>
        </div>




    <?php 
    echo $this->Form->submit('Add Task', array('class' => 'formSubmit',  'title' => 'Create Task') ); 
?>
</fieldset>
<?php echo $this->Form->end(); ?>

还有一个javascript文件显示和隐藏可选的单选按钮,但我认为这与它停止保存到数据库的原因无关。

当我点击&#34;添加任务&#34;在表单上的按钮,它根本不做任何事情(不保存到数据库,并且不像以前那样重定向到index.ctp视图)。不知道我在这里失踪了什么!

更新

修正了问题!在我的表单中我指定了默认值null的地方,它传递了一个空字符串。数据模型期望&quot; month_number&#39;的数值。和&#39; day_number,&#39;所以它没有处理。

我通过添加0 =&gt;来修复它&#39;&#39;到选择列表,并指定0作为默认值,现在它工作正常。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

看起来您已将提交表单按钮分配给其他类,这就是为什么它不会触发表单。

echo $this->Form->submit('Add Task', array('class' => 'formSubmit',  'title' => 'Create Task') );

尝试将其更改为以下任一项

echo $this->Form->submit('Add Task', array(
'class' => 'taskForm',  
'title' => 'Create Task')); 

echo $this->Form->button('Add Task', array(
'class' => 'taskForm',  
'title' => 'Create Task',
'action' => 'submit;));  

或修改表单结束标记以查看它是否正常触发。

更改此

echo $this->Form->end();

echo $this-Form->end('Submit');

答案 1 :(得分:0)

我在代码中看不到错误。 在控制器添加中添加此项并进行调试,以获取有关所发生情况的更多信息。

public function add() {
    $this->loadModel('Task');
    debug($this->request->is('post')); //try this first
    //debug($this->request); //after try this
    if ($this->request->is('post')) {   
        $this->Task->create();
        if ($this->Task->save($this->request->data)) {
            $this->Session->setFlash(__('Task saved!'));
            $this->redirect(array('action' => 'index'));
        } 
        else {
            $this->Session->setFlash(__('The task could not be saved'));
        }   
    }

}

loadModel添加了这个。用显示调试更新你的问题,我更新mi答案。