2013-04-22 56 views
0

我发布波纹管的代码工作得很好,并且页面显示正确。我该如何改进我的Codeigniter代码?

控制器:

class Articles extends Frontend_Controller { 

    public function __construct() { 
     parent::__construct(); 
     $this->homeMetaTags = $this->configOptionsModel->get(1); 
     $this->bgimage = $this->configOptionsModel->get(2); 
     $this->db->where('catid = "1"'); 
     $this->services = $this->articlesModel->get(); 
     $this->projects = $this->projectsModel->get(); 
    } 

    public function displayArticle() 
{ 

     $data['default_metatags'] = $this->homeMetaTags; 
     $data['bgimage'] = $this->bgimage; 
     $data['services'] = $this->services; 
     $data['projects'] = $this->projects; 
     $this->load->model('articlesModel'); 
     $artid = $this->uri->segment(3); 
     $this->db->where('artid ='.$artid); 
     $data['article'] = $this->articlesModel->get(); 
     $data['main_content'] = 'articles'; 
     $this->load->model('articlesImagesModel'); 
     $this->db->where('artid ='.$artid); 
     $data['artimg'] = $this->articlesImagesModel->get(); 
    $this->load->view('frontEnd/template',$data);  
} 
} 

查看:

<?php echo $article[0]['title'];?> 
<?php echo $article[0]['articletext'];?> 

在地址栏中会显示以下网址:

www.mysite.com/articles/displayArticle/3 到目前为止, 太好了。

但是......如果我在地址栏输入:www.mysite.com/articles/displayArticle/3546666

而是被重定向到自定义404错误页面,我得到以下错误:

A PHP Error was encountered 
Severity: Notice 
Message: Undefined offset: 0 
Filename: frontEnd/articles.php 
Line Number: 12 

A PHP Error was encountered 
Severity: Notice 
Message: Undefined offset: 0 
Filename: frontEnd/articles.php 
Line Number: 48 

果然,第12行和第48行是视图中代码所在的两行。

我想如果有人键入非现有的ID被重定向到404页面,而不是看到这些errors.Anyone可以帮助吗?

问候,卓然

+0

发布你的模型代码有一些问题,它 – 2013-04-22 08:55:40

回答

1
class Articles extends Frontend_Controller { 

    public function __construct() { 
     parent::__construct(); 
     $this->homeMetaTags  = $this->configOptionsModel->get(1); 
     $this->bgimage   = $this->configOptionsModel->get(2); 
     $this->db->where('catid',1);// What is this doing here. This should be in model 
     $this->services   = $this->articlesModel->get(); 
     $this->projects   = $this->projectsModel->get(); 
    } 

    public function displayArticle() 
    { 
     $this->load->model('articlesModel'); 
     $this->load->model('articlesImagesModel'); 

     $data['default_metatags'] = $this->homeMetaTags; 
     $data['bgimage']   = $this->bgimage; 
     $data['services']   = $this->services; 
     $data['projects']   = $this->projects; 

     $artid = $this->uri->segment(3); 

     $this->db->where('artid',$artid);// What is this doing here. This should be in model 

     $data['article']   = $this->articlesModel->get(); 
     $data['main_content']  = 'articles'; 
     /* What is it doing here */ 
     $this->db->where('artid ='.$artid); 

     $data['artimg']    = $this->articlesImagesModel->get(); 

     $this->load->view('frontEnd/template',$data);  
    } 
} 

当你调用$this->articlesModel->get()要返回 row_array(),而不是result_array()我承担。该函数返回的对象不是 对象数组。改变你的模型row_array()result_array()或视图

<?php echo $article['title'];?> 
<?php echo $article['articletext'];?> 

这应该做工精细

+0

确实,这在我的模型中:$ method = $ single? 'row_array':'result_array'; – Zoran 2013-04-22 09:21:35

0

尝试正确使用视图模型控制器模型。 当前您正在检索控制器中的数据库访问权限。我建议你看这个开始。 http://www.youtube.com/watch?v=mWsAruzW3Jw

无论如何,展现出404页使用此:

show_404(); 

404处理器:

/** 
* 404 Page Handler 
* 
* This function is similar to the show_error() function above 
* However, instead of the standard error template it displays 
* 404 errors. 
* 
* @access public 
* @return void 
*/ 
function show_404($page = '', $log_error = TRUE) 
{ 
    $_error =& load_class('Exceptions', 'core'); 
    $_error->show_404($page, $log_error); 
    exit; 
} 
0

1)您必须重新因子代码。模型代码不应该像控制器一样搞乱(get,where函数)。你应该通过传递一些值来处理模型本身。 2)在这一行'$ this-> db-> where('artid ='。$ artid);'您应该在传递此函数之前验证$ artid。

3)如果你有这样的错误信息,使用try catch语句来显示404页面。

4)如果您正在重定向到404页面,则应该正确记录错误以便稍后进行修复。

5)如果需要通用功能,请将其保存在助手中并调用函数名称。不要将整个代码保留在构造函数中。这是最佳做法。

如果您需要其他任何东西,请问我。谢谢。我希望这能帮到您。

+0

嗨Sakthi ...你可以发布验证身份证的任何示例(代码片段)吗? – Zoran 2013-04-22 09:11:52

+0

当然。在这里,你可以验证ctype_digit()。请检查codeignitor帮助程序库。我不记得在编号。好久不见。 – Sakthi 2013-04-22 09:16:50