如何以cakephp的形式创建像现有输入字段的新输入字段

时间:2015-02-14 18:11:50

标签: php forms cakephp

你好我是cakephp的初学者我喜欢在管理员端添加一个输入字段add.ctp我从来没有使用但我知道这个mvc结构所以我试着复制并粘贴现有的输入字段'name'我刚复制相同的代码,只更改名称作为'sidename'它工作正常。我也在相应的表格上创建了​​一个名为“sidename”的数据库字段。

我不熟悉模型和控制器,我只需要了解事情

  1. 当我们在表单中添加新字段时,需要更新所有内容和文件(模型,视图,控制器)以保存数据

  2. 如果我想要更新意味着在这种情况下,我在我的代码中使用帮助类,那么我需要更新哪里

  3. 一旦存储数据库就意味着如何在ctp文件中检索它

  4. 现有代码(我需要在下面的代码中添加新的字段sidename ??)

    enter code here <h3><?php echo __l('General'); ?></h3>
            <?php
                echo $this->Form->input('user_id', array('type' => 'hidden'));
                echo $this->Form->input('clone_deal_id', array('type' => 'hidden'));
                //echo $this->Form->input('name',array('label' => __l('Name')));
                echo $this->Form->input('name', array('type'=>'text','class' => 'js-dealname-count {"display":"js-dealname","field":"js-dealname-count","count":"'.Configure::read('deal.dealname_count').'"}','label'=>__l('Name'), 'info' => __l('This is deal name shown in home page.') . ' ' . '<span class="character-info">' . __l('You have') . ' ' . '<span id="js-dealname-count"></span>' . ' ' . __l('characters left') . '</span>'));
    
                echo $this->Form->input('sidename',array('label' => __l('SideName')));
    
                //echo $this->Form->input('sidename', array('type'=>'text','class' => 'js-dealname-count {"display":"js-dealname","field":"js-dealname-count","count":"'.Configure::read('deal.dealname_count').'"}','label'=>__l('SideName'), 'info' => __l('This is deal name shown in side bar.') . ' ' . '<span class="character-info">' . __l('You have') . ' ' . '<span id="js-dealname-count"></span>' . ' ' . __l('characters left') . '</span>'));
    
                echo $this->Form->input('DealCategory', array('type'=>'select', 'multiple'=>'checkbox','id'=>'DealCategory1', 'label' => __l('Category'),'info' =>'Choose Category'));
                //echo $this->Form->input('deal_category_id', array('label' => __l('Category'),'empty' =>__l('Please Select'))); 
                if($this->Auth->user('user_type_id') == ConstUserTypes::Admin || $this->Auth->user('user_type_id') == ConstUserTypes::Employee):
                    echo $this->Form->input('company_id', array('label' => __l('Merchant'),'empty' =>__l('Please Select')));
                    echo $this->Form->input('company_slug', array('type' => 'hidden'));
                else:
                    echo $this->Form->input('company_id', array('type' => 'hidden'));
                    echo $this->Form->input('company_slug', array('type' => 'hidden'));
                endif;
            ?>
    

3 个答案:

答案 0 :(得分:0)

您应该在PHP / cakePHP中使用现代和更好的功能,例如compact()

//Here you can include many conditions to find data AND fields to select.
$variable_to_pass = $this->YourModel->find('all');    
$this->set(compact('variable_to_pass'));

这可能看起来没有比上面设置的每个变量更好,但让我给你更大的图片。

$variable_to_pass1 = $this->YourModel->find('all');    
$variable_to_pass2 = $this->YourModel->find('all');    
$variable_to_pass3 = $this->YourModel->find('all');    
$variable_to_pass3 = $this->YourModel->find('all');    
$variable_to_pass4 = $this->YourModel->find('all');    
$variable_to_pass5 = $this->YourModel->find('all');    
$variable_to_pass6 = $this->YourModel->find('all');
$variable_to_pass7 = $this->YourModel->find('all');
$variable_to_pass8 = $this->YourModel->find('all');
$variable_to_pass9 = $this->YourModel->find('all');

您的OLD年龄方法:

$this->set ('variable_to_pass1', $variable_to_pass9);
$this->set ('variable_to_pass2', $variable_to_pass9);
$this->set ('variable_to_pass3', $variable_to_pass9);
$this->set ('variable_to_pass4', $variable_to_pass9);
$this->set ('variable_to_pass5', $variable_to_pass9);
$this->set ('variable_to_pass6', $variable_to_pass9);
$this->set ('variable_to_pass7', $variable_to_pass9);
$this->set ('variable_to_pass8', $variable_to_pass9);
$this->set ('variable_to_pass9', $variable_to_pass10);

现代方法(减少头痛:)和更少的代码行。)

$this->set(compact('variable_to_pass1','variable_to_pass2','variable_to_pass3','variable_to_pass4','variable_to_pass5','variable_to_pass6','variable_to_pass7','variable_to_pass8','variable_to_pass9'));

View 中,您可以像这样使用它,就像在控制器中设置变量一样使用

echo $variable_to_pass1;

如果它在数组中你在foreach的$ variable_to_pass1中获得的内容。

答案 1 :(得分:0)

我认为您的问题与此问题相同cakephp new field not saving

  

您需要通知cakephp您的数据库中有新字段。

答案 2 :(得分:-1)

您好,欢迎来到cakephp的精彩世界。

因此,如果您向公司添加字段并在数据库中添加字段,则基本完成。 Cakephp为您做了其他一切。我猜你的模型和你正在使用此信息的页面,但它将使用与其余表单数据相同的约定显示。

在使用

的控制器中
$general = $this->General-> find ('all');

然后使用数据库中的所有行。

$this->set ('general', $general);

这将在视图中设置一个名为general的变量。

从视图中你可以

Foreach ($general as $key => $value){
$sirname = $value['General']['sirname'];
}

希望这会有所帮助。很抱歉我手机上的格式浪费了一些时间。如果您发布更多代码,我们肯定可以提供更多帮助,甚至可以编写您需要的代码。特别是你的控制器和视图。