来自表单输入的 CodeIgniter 重定向

Posted

技术标签:

【中文标题】来自表单输入的 CodeIgniter 重定向【英文标题】:CodeIgniter Redirection from form input 【发布时间】:2016-11-16 05:18:00 【问题描述】:

我从未使用过 php 框架,但我想学习如何使用它以便我可以更轻松地为我的公司编程,所以我选择了 CodeIgniter。

我正在关注新闻部分的代码点火器教程,以便了解事情的工作原理 - 但我遇到了一些问题。

现在,我在教程中指出我有一个提交并带我进入成功页面的表单。在普通 PHP 中,这就是我将页面重定向到提交的新闻项目的查看页面的地方。在 CodeIgniter 中,我的控制器中有一个视图函数

        public function view($slug = NULL)
        
                $data['news_item'] = $this->news_model->get_news($slug);

                if (empty($data['news_item']))
                
                        show_404();
                

                $data['title'] = $data['news_item']['title'];

                $this->load->view('templates/header', $data);
                $this->load->view('news/view', $data);
                $this->load->view('templates/footer');
        

我不确定在提交时如何从表单中获取 slug。

这是我的创建函数(基本上是插入数据库信息并重定向到news/success的函数)

        public function create()
        
            $this->load->helper('form');
            $this->load->library('form_validation');

            $data['title'] = 'Create a news item';

            $this->form_validation->set_rules('title', 'Title', 'required');
            $this->form_validation->set_rules('text', 'Text', 'required');

            if ($this->form_validation->run() === FALSE)
            
                $this->load->view('templates/header', $data);
                $this->load->view('news/create');
                $this->load->view('templates/footer');

            
            else
            
                $this->news_model->set_news();
                $this->load->view('news/success');
            
        

但我希望它重定向到视图页面。为此,我需要拥有我相信的蛞蝓。所以它应该重定向到news/view/$slug - 但我不知道该怎么做。

我的 set_news 模型:

        public function set_news()
        
            $this->load->helper('url');

            $slug = url_title($this->input->post('title'), 'dash', TRUE);

            $data = array(
                'title' => $this->input->post('title'),
                'slug' => $slug,
                'text' => $this->input->post('text')
            );

            return $this->db->insert('news', $data);
        

【问题讨论】:

【参考方案1】:

你应该使用类似的东西:

redirect('news/view/'.url_title($this->input->post('title'), 'dash', TRUE));

【讨论】:

那应该出现在我的 success.php 页面上吗?要么?抱歉,我不太确定为什么我不能完全理解整个框架,但我相信我最终会理解的。 还有,你怎么知道我的表单是POST? 是的,它应该在成功插入新闻后在success.php上。关于表单类型,这只是一个假设,如果是 GET 你应该使用:redirect('news/view/'.$this->input->get('slug')); 基于我的模型,它是 POST。但是,这对我不起作用,它会将我重定向到news/view,但不会添加 slug。我认为成功页面没有获得 POST 信息,我认为这是我最挣扎的地方 在看到函数 set_news() 后(我认为在我发布回复时它不可用),我知道 slug 在表单中不可用,这就是你应该创建它的原因 - 因为发生在 set_news - 因此我建议的代码是:redirect('news/view/'.url_title($this->input->post('title'), 'dash', TRUE));

以上是关于来自表单输入的 CodeIgniter 重定向的主要内容,如果未能解决你的问题,请参考以下文章

表单提交重定向到codeigniter的索引页面

CodeIgniter - 使用重定向重新填充无效表单

在 CodeIgniter 4 中提交表单后重定向页面无法工作

CodeIgniter 闪存数据

CodeIgniter - AJAX 注册表单验证

在 Codeigniter 中检查登录和重定向不起作用?