Несколько переменных после контроллера в URL - PullRequest
0 голосов
/ 07 февраля 2012

Я пытаюсь понять, как обрабатывать мои маршруты и контроллер.

После того, как пользователь зарегистрировался на моем сайте, он получил электронное письмо со ссылкой на контроллер активации, в котором запрашивался пароль для подтверждения учетной записи. Однако я пытаюсь добавить оператор if в мой контроллер, чтобы он проверял, что в конце активации в URL есть два параметра, а если нет, то он покажет страницу с моей ошибкой. Также необходимо убедиться, что первый параметр числовой.

Почему-то у меня что-то настроено правильно, и я не уверен, что.

Вот что я использовал для маршрута

$route['activate/:num/:any'] = "activate";

Контроллер:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Activate extends CI_Controller 
{ 

public function __construct()
{
    parent::__construct();
    $this->load->library('kow_auth');            
}   

public function index()
{
    //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="http://www.kansasoutlawwrestling.com/kowmanager/assets/js/activatevalidate.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*/

    if (is_numeric($this->uri->segment(3)) OR $this->uri->segment(4) == '')
    {
        $bodyContent = "error_page";
    }
    else
    {
        $bodyContent = "activate_form";//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->load->view('usermanagement/index', $this->data);
}

function activate_submit()
{        
    $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|min_length[6]|max_length[12]|alpha_numeric');

    $user_id            = $this->uri->segment(3);
    $registration_key   = $this->uri->segment(4);

    if (($registration_key == '') OR ($user_id == ''))
    {
        echo json_encode(array('error' => 'yes', 'message' => 'URL was not complete!')); 
    }
    else
    {
        if (!$this->form_validation->run()) 
        {
            echo json_encode(array('error' => 'yes', 'message' => 'There was a problem submitting the form! Please refresh the window and try again!'));    
        }
        else
        {                           
            if ($this->kow_auth->activate_user($user_id, $registration_key, $this->input->post('password'))) 
            {
                echo json_encode(array('sucess' => 'yes', 'message' => 'Your account has been successfully activated!'));
            } 
            else 
            {                                                           
                echo json_encode(array('error' => 'yes', 'message' => 'The activation code you entered is incorrect or expired!'));
            }
        }
    }


}

}

/* End of file activate.php */ 
/* Location: ./application/controllers/activate.php */ 

Ошибка контроллера

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Error extends CI_Controller 
{ 

public function __construct()
{
    parent::__construct();           
}   

public function index()
{
    //Config Defaults Start
    $msgBoxMsgs = array();//msgType = dl, info, warn, note, msg
    $cssPageAddons = '';//If you have extra CSS for this view append it here
    $jsPageAddons = '';//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*/

    $bodyContent = "error_page";//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->load->view('usermanagement/index', $this->data);
}

}

/* End of file error.php */ 
/* Location: ./application/controllers/error.php */ 

Какие-нибудь дополнительные идеи?

EDIT Даже с двумя ответами ниже, я все еще получаю те же сообщения об ошибках.

http://www.kansasoutlawwrestling.com/kowmanager/activate/

Ответы [ 2 ]

5 голосов
/ 07 февраля 2012

Измените ваши маршруты на:

$route['activate/:num/:any'] = "activate/index/$1/$2";

Это позволит вам передать два параметра в функцию индекса вашего контроллера активации следующим образом:

public function index($param1, $param2)

Затем выбыть в состоянии сделать:

if (is_numeric($param1) OR $param2 == '')
{
    $bodyContent = "error_page";
}
else
{
    $bodyContent = "activate_form";
}

Надеюсь, что вам поможет.

1 голос
/ 07 февраля 2012

Я согласен с My_Mark, его ответ зависит от того, что вы изначально просили. Таким образом, мы собираемся основать это его первоначальный ответ .. Ваша проблема с вашим if-else.

Вам понадобится

public function index($param1, $param2)

Однако я бы изменил его, чтобы он выглядел больше как

public function index($param1 = NULL, $param2 = NULL)

Также обратите внимание, что это относится к индексной функции вашего контроллера, если у вас настроен контроллер, где у вас работает несколько представлений, основанных на функции, такой как, например, функция активации. Затем вам нужно будет заменить «index (» на «activ (»). Во-вторых, судя по тому, что вы говорите, если кто-то приземлится на контроллер, вы хотите, чтобы он набрал 404 или выдал какую-то ошибку. Если параметры не соблюдены. Вот почему я изменил вышесказанное так, как я сделал, так что ваша функция не ищет параметры, которые не установлены и, скорее всего, ошибка не будет установлена. Поэтому на всякий случай мы устанавливаем их по умолчанию на NULL.

Так что мое решение было бы сделать что-то вроде ..

$x = 0;
if(($param1 !== NULL)&&($param2 !== NULL))
{

    //params not null yay..
    if((isset($param1))&&((trim($param1) !== '')||(!empty($param1))))
    {
        if(!is_numeric($param1)
        {
          $x++;
        } 
    }
    if((isset($param2))&&((trim($param2) !== '')||(!empty($param2))))
    {
        if(/*whatever your constraint for $param2 (!preg_match()) or something*/)
        {
          $x++;
        } 
    }


    if($x !== 0)
    {
       $bodyContent = "error_page";
    }
    else
    {
       $bodyContent = "activate_form";
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...