2015-12-11 109 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中的參數被刪除。