2015-12-11 112 views
1

我使用CakePHP 2.6.7: 我有密码重置网址,如: http://www.jegeachi.com/resellers/resetpw/9610f4e33d96ad6189c5a779ab90f10aBXX1066056669XXB12/如何在cakephp中获取url参数?

下面的经销商是控制器和resetpw是动作9610f4e33d96ad6189c5a779ab90f10aBXX1066056669XXB12是我要传递到resetpw函数的参数。

现在resetpw.ctp:

<style type="text/css"> 
    .alert { 
     padding: 6px; 
     margin-bottom: 5px; 
     border: 1px solid transparent; 
     border-radius: 4px; 
     text-align: center; 
    } 
    .alert.alert-error { 
     background: #A9B0B5; 
     color: #EF5858; 
     font-weight: normal; 
    } 

</style> 
<div class="page-content-wrapper"> 
    <div class="page-content"> 
     <!-- BEGIN PAGE CONTENT--> 
     <div class="content"> 

      <!-- BEGIN LOGIN FORM --> 

      <?php 
      echo $this->Form->create('Reseller', array(
       'inputDefaults' => array(
        'label' => false, 
        'div' => false 
       ), 
       'class' => 'login-form', 
       'url' => array('controller' => 'resellers', 'action' => 'resetpw') 
        ) 
      ); 
      ?> 




      <h3 class="form-title">Type your new password</h3> 
      <div class="alert alert-danger display-hide"> 
       <button class="close" data-close="alert"></button> 
       <span> 
        Enter your new password first. </span> 
      </div> 

      <div class="form-group"> 
       <label class="control-label visible-ie8 visible-ie9">New Password</label> 
       <div class="input-icon"> 
        <i class="fa fa-lock"></i> 

        <?php 
        echo $this->Form->input(
          'password', array(
         'class' => 'form-control placeholder-no-fix', 
         'type' => 'password', 
         'autocomplete' => 'off', 
         'placeholder' => 'New Password' 
          ) 
        ); 
        ?> 
       </div> 
      </div> 

      <div class="form-actions"> 
       <?php 
       echo $this->Form->button(
         'Reset Password <i class="m-icon-swapright m-icon-white"></i>', array(
        'class' => 'btn blue pull-right', 
        'type' => 'submit', 
        'escape' => false 
         ) 
       ); 
       ?> 

      </div> 

      <?php echo $this->Form->end(); ?> 
      <!-- END LOGIN FORM --> 


     </div> 
     <!-- END PAGE CONTENT --> 
    </div> 
</div> 
<!-- END CONTENT --> 

内转售行动:

function resetpw($a){ 
    $this->layout = "public-login"; 
    $this->loadModel('Reseller'); 
    if ($this->request->is('post')) { 
     echo 'a : '.$a; 
     pr($this->params['url']); exit; 
     $a = func_get_args(); 
    $keyPair = $a[0]; 
    $key = explode('BXX', $keyPair); 
    $pair = explode('XXB',$key[1]); 
    $key = $key[0]; 
    $pair = $pair[1]; 
    $password = $this->request->data['Reseller']['password']; 
    unset($this->request->data['Reseller']['password']); 
    $uArr = $this->Reseller->findById($pair); 
    if($uArr['Reseller']['resetkey'] == $key) { 
     $this->Reseller->read(null, $pair); 
     $this->Reseller->set('password', $password); 
     if($this->Reseller->save()) { 
      $msg = ' <div class="alert alert-success"> 
          <button type="button" class="close" data-dismiss="alert">×</button> 
          <strong>Your password has been reset</strong> 
         </div>'; 
     } else { 
       $msg = ' <div class="alert alert-error"> 
          <button type="button" class="close" data-dismiss="alert">×</button> 
          Something has gone wrong. Please try later or <strong>sign up again</strong> 
         </div>'; 
      } 
     } else { 
      $msg = ' <div class="alert alert-error"> 
       <button type="button" class="close" data-dismiss="alert">×</button> 
        <strong>Invalid link.Please check your reset link</strong> Invalid link.Please check your reset link 
         </div>'; 
     } 

     $this->Session->setFlash($msg); 

     $this->redirect(array('controller'=>'resellers', 'action' => 'login')); 

    }  
} 

在这里,我要赶URL数据9610f4e33d96ad6189c5a779ab90f10aBXX1066056669XXB12 但没有下面的打印我的数据:

echo 'a : '.$a; 
    pr($this->params['url']); exit; 

如何获得此url值。

回答

2

正如我在对您之前的问题发表意见时所说的,您应该先阅读文档。在cakephp的意义上,你在这个动作中所做的在几个关卡上是错误的。通常你会得到这个动作的URL我想

.../resellers/resetpw/9610f4e33d96ad6189c5a779ab90f10aBXX1066056669XXB12/ 

,并通过你已经在你的控制器,操作参数:

public function resetpw($a = null) 

,那么你会检查是否$a不为空,因为你没有某种令牌就无法重置密码。在你的行动$a已经有这个价值9610f4e33d96ad6189c5a779ab90f10aBXX1066056669XXB12。 没必要用这样的:

$a = func_get_args(); 

第二件事,你应该命名参数是有意义的,$a并不意味着什么,但$token或类似的东西会带来多大的改变。

+0

其实我把$ a分成我想要的变量,如$ key,$ id。因此,我只是把$ a的原始值作为临时变量。谢谢。 –

+0

嗯,你可以用'$ a'做任何你想做的事情。 – skywalker

0

有多种方法可以做到这一点。在下面的函数中(不是编写整个函数),你正试图获得$a中的url参数,但是你传递的是参数。因此$a没有价值

function resetpw($a){ 
    $this->layout = "public-login"; 
    $this->loadModel('Reseller'); 
    if ($this->request->is('post')) { 
     echo 'a : '.$a; //$a will have no values here 
     pr($this->params['url']); exit; 

在你的情况,你需要抓PARAMS像下面

$a = $this->params['passed'][0];

或获得参数的URL应该像下面

http://www.jegeachi.com/resellers/resetpw?9610f4e33d96ad6189c5a779ab90f10aBXX1066056669XXB12/

所以你可以收集它在$a。希望这对你有帮助!

0

我通过删除表单中的'url'来解决这个问题。

我改变

<?php 
      echo $this->Form->create('Reseller', array(
       'inputDefaults' => array(
        'label' => false, 
        'div' => false 
       ), 
       'class' => 'login-form', 
       'url' => array('controller' => 'resellers', 'action' => 'resetpw') 
        ) 
      ); 
      ?> 

<?php 
      echo $this->Form->create('Reseller', array(
       'inputDefaults' => array(
        'label' => false, 
        'div' => false 
       ), 
       'class' => 'login-form', 

        ) 
      ); 
      ?> 

现在,它的工作原理。当你设置url时,url中的参数被删除。