2012-03-12 55 views
0

我遇到此路由的问题,不确定我的问题究竟是什么。CI路由问题无法获得变量

我的页面位于http://www.kansasoutlawwrestling.com/kowmanager/pmsystem/viewmessage/1其中1是消息ID。

我成立了一个路线,看起来像

$route['pmsystem/viewmessage/(:num)'] = 'pmsystem/viewmessage/$1'; 

,我仍然得到一个错误消息像这样

A PHP Error was encountered 

Severity: Warning 

Message: Missing argument 1 for Pmsystem::viewmessage() 

Filename: controllers/pmsystem.php 

Line Number: 76 


// View A Message 
function viewmessage($message_id) 
{ 
    //Config Defaults Start 
    $msgBoxMsgs = array();//msgType = dl, info, warn, note, msg 
    $cssPageAddons = '';//If you have extra CSS for this view append it here 
    $jsPageAddons = '<script src='.base_url().'../assets/js/cpanel/personalmessages.js></script><script src='.base_url().'assets/js/mylibs/jwysiwyg/jquery.wysiwyg.js></script>';//If you have extra JS for this view append it here 
    $metaAddons = '';//Sometimes there is a need for additional Meta Data such in the case of Facebook addon's 
    $siteTitle = '';//alter only if you need something other than the default for this view. 
    //Config Defaults Start 


    //examples of how to use the message box system (css not included). 
    //$msgBoxMsgs[] = array('msgType' => 'dl', 'theMsg' => 'This is a Blank Message Box...'); 

    /**********************************************************Your Coding Logic Here, Start*/ 

    // Checks to see if a session is active for user and shows corresponding view page 
    if (!$this->loggedin->chkLoginStatus() === FALSE) 
    { 
     if(! $this->uri->segment(3)) 
     { 
      redirect('error', 'refresh'); 
     } 
    } 
    else 
    { 
     redirect('login', 'refresh'); 
    } 
    $bodyContent = 'viewpm';//which view file 
    $bodyType = "full";//type of template     

    /***********************************************************Your Coding Logic Here, End*/ 

    //Double checks if any default variables have been changed, Start. 
    //If msgBoxMsgs array has anything in it, if so displays it in view, else does nothing.  
    if(count($msgBoxMsgs) !== 0) 
    { 
     $msgBoxes = $this->msgboxes->buildMsgBoxesOutput(array('display' => 'show', 'msgs' =>$msgBoxMsgs)); 
    } 
    else 
    { 
     $msgBoxes = array('display' => 'none'); 
    } 

    if($siteTitle == '') 
    { 
     $siteTitle = $this->metatags->SiteTitle(); //reads 
    } 

    //Double checks if any default variables have been changed, End. 

    $this->data['msgBoxes'] = $msgBoxes; 
    $this->data['cssPageAddons'] = $cssPageAddons;//if there is any additional CSS to add from above Variable this will send it to the view. 
    $this->data['jsPageAddons'] = $jsPageAddons;//if there is any addictional JS to add from the above variable this will send it to the view. 
    $this->data['metaAddons'] = $metaAddons;//if there is any addictional meta data to add from the above variable this will send it to the view. 
    $this->data['pageMetaTags'] = $this->metatags->MetaTags();//defaults can be changed via models/metatags.php 
    $this->data['siteTitle'] = $siteTitle;//defaults can be changed via models/metatags.php 
    $this->data['bodyType'] = $bodyType; 
    $this->data['bodyContent'] = $bodyContent; 
    $this->data['user_data'] = $this->users->getUserByUserId($this->session->userdata('user_id')); 
    $this->data['users'] = $this->loggedin->getUserList(); 
    $this->data['personal_messages'] = array($this->pmmodel->getTotalMessages($this->session->userdata('user_id')), $this->pmmodel->getTotalUnreadMessages($this->session->userdata('user_id')), $this->pmmodel->getLast5Messages($this->session->userdata('user_id'))); 
    $this->data['messages'] = array($this->pmmodel->getInboxMessages($this->session->userdata('user_id')), $this->pmmodel->getSentMessages($this->session->userdata('user_id'))); 
    //$this->data['message_data'] = $this->pmmodel->getPmMessage($this->uri->segment(3)); 
    $this->load->view('cpanel/index', $this->data); 
} 

UPDATE

// Checks to see if a session is active for user and shows corresponding view page 
    if (!$this->loggedin->chkLoginStatus() === FALSE) 
    { 
     if (!is_numeric($this->uri->segment(3))) 
     { 
      $this->data['message_data'] = 'Invalid message id!'; 
     } 
     else 
     { 
      $this->data['message_data'] = $this->pmmodel->getPmMessage($this->uri->segment(3)); 
     } 
     $bodyContent = 'viewpm';//which view file 
    } 
    else 
    { 
     redirect('login', 'refresh'); 
    } 

    $bodyType = "full";//type of template 
+0

你的控制器是什么样的,特别是'viewmessage'函数?顺便说一下,你的路线是多余的 - 它不会改变什么,你期望它做什么,默认情况下还没有完成? – 2012-03-12 20:28:11

+0

我更新了我的代码。感谢您的回复。当没有id集时,我希望它被重定向到错误控制器。 – 2012-03-12 20:30:48

回答

1

这条路线是不必要的 - 它不会改变任何东西。

$route['pmsystem/viewmessage/(:num)'] = 'pmsystem/viewmessage/$1'; 

您可以删除该路线。问题在于:

function viewmessage($message_id) // no default value means it's required 
{ 
    // your code 
} 

您的控制器方法从字面上接受用户输入作为参数(无论在地址栏中)。您始终必须考虑那些在CI控制器方法中不存在的必需参数。

function viewmessage($message_id = NULL) 
{ 
    if (! $message_id) show_404(); 
    // your code 
} 

如果所需的$message_id不存在,这将消除错误并显示404。另外,$this->uri->segment(3)是不必要的,因为它应该具有与$message_id相同的值。

我非常不喜欢重定向到一个错误页面,当你真的想要一个404,但这取决于你。这肯定不会帮助用户在重定向后地址丢失时意识到他们的错误,并且通过这样做发送错误的HTTP标头。

+0

好的,谢谢你的帮助 – 2012-03-12 20:39:52

+0

我修正了,但是我想要做的是找出它的数字,如果没有,然后让它发送消息给没有指定消息的视图。我有我的代码上面更新。我想知道这是否足够好用,以及如果我应该如何处理这样一个事实,即如果某人不是发件人或收件人尝试访问该邮件的人。我应该在什么时候阻止他们访问该消息。 – 2012-03-12 21:06:52

+0

只需将它传递给数据库并查看是否得到结果。没有任何其他方式验证它的意义。 – 2012-03-12 21:09:34