0

我是codeinginter的新手。这与我过去的编码经验非常不同,我目前想做的是将数据发布到服务器并检查。由于输入框是动态生成的,所以我的添加功能很乱。

首先对于每个数据,它必须有 1 个标题和 1 个内容,并且随机编号(或没有)一个链接组(链接文本和链接),例如 LinkText1 、 Link1 、 LinkText2 、 Link2 ......等等。

我想以更优雅的方式做到这一点。

我现在做的是在 models 中有 2 种方法,1 用于 title 和 content ,在对它感兴趣之后,返回最后一个 id ,基于这个 id 附加所有其他链接组。

public function add()
{
    //if save button was clicked, get the data sent via post
    if ($this->input->server('REQUEST_METHOD') === 'POST')
    {
        //form validation
        $this->form_validation->set_rules('title', '消息標題', 'required');
        $this->form_validation->set_rules('content', '消息內容', 'required');
        foreach ($this->input->post() as $key => $value) {
            if (strstr($key,"linkText") !== False) {
                $this->form_validation->set_rules($key, '連結標題', 'required');
            }
            else if (strstr($key,"link") !== False) {
                 $this->form_validation->set_rules($key, '連結地址', 'required');
            }
        }
        $this->form_validation->set_error_delimiters('<div class="alert alert-error"><a class="close" data-dismiss="alert">×</a><strong>', '</strong></div>');

        //if the form has passed through the validation
        if ($this->form_validation->run())
        {
            $data_to_store = array(
                'title' => $this->input->post('title'),
                'content' => $this->input->post('content')
            );

            //if the insert has returned true then we show the flash message
            $lastID = $this->news_model->store_news($data_to_store);

            if($lastID !== False){
                foreach ($this->input->post() as $key => $value) {
                    if (strstr($key,"linkText") !== False) {
                        $linkText = $key;
                    }else if (strstr($key,"link") !== False) {
                        $link = $key;
                    }

                    if (isset($linkText) && isset($link)) {
                        $data_to_store = array(
                        'title' => $this->input->post($linkText),
                        'url' => $this->input->post($link),
                        'news_id' => $lastID
                        );

                        if($this->news_model->store_news_link($data_to_store)){
                            $data['flash_message'] = TRUE;
                        } else {
                            $data['flash_message'] = FALSE; 
                        }
                    }
                }
            }else{
                $data['flash_message'] = FALSE; 
            }
        }else{
                $data['flash_message'] = FALSE; 
        }
    }   
    //load the view
    $data['main_content'] = 'admin/news/add';
    $this->load->view('includes/template', $data);
}    

它循环了 2 次,还有很多重复的代码,有没有更优雅的方法来实现呢?感谢您的帮助。

4

1 回答 1

2

你可以删除

if ($this->input->server('REQUEST_METHOD') === 'POST')

因为

$this->form_validation->run()

正在处理它。

也请摆脱许多

$data['flash_message'] = FALSE;

只需将该行放在函数的开头,然后在需要时将其更改为 true。在整个代码中复制粘贴是没有意义的。

我不确定我是否理解这个问题,但我认为您正在寻找输入数组,例如

<input name="myarray[]" ... />

CodeIgniter 可以验证这些,请参见此处

于 2013-10-08T14:11:26.520 回答