cakepp中的添加功能突然停止工作


Add function in cakephp suddenly stopped working

我是cakeHP的新手,所以我可能缺少一些明显的东西。

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

我的任务模型:

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文件中的添加函数:

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'));
        }   
    }
}

我的任务/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文件显示和隐藏可选的单选按钮,但我认为这与它停止保存到数据库的原因无关。

当我点击表单上的"添加任务"按钮时,它什么都不做(不会保存到数据库,也不会像以前那样重定向到index.ctp视图)。不知道我在这里错过了什么!

更新

修复了问题!在我的表单中,我指定了默认值null的地方,它传递了一个空字符串。数据模型需要"month_number"answers"day_number)的数值,因此未进行处理。

我通过将0=>''添加到选择列表中并指定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添加了这一点。更新你的问题显示调试,我更新我的答案。

看起来您将提交表单按钮分配给了另一个类,这就是为什么它不触发表单的原因。

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');