2017-07-31 78 views
1

我有自定義類laravel 5.4應用程序應該返回哈希祕密。類是在Laravel自定義函數返回NULL,但在var_dump不是NULL

class Hash { 

    // Unencrypted secret 

    private $secret; 

    public function generateSecret(){ 

     $secret = generateSecretKey(); 

     $secret_hash = password_hash($secret, PASSWORD_BCRYPT); 

     Session::put('secret-hash', $secret_hash); 
     $this->secret = $secret;   
    } 
} 

然後在我的控制器我有

use Hash; 
class UsersController extends BaseController 
{ 
    public function Auth() 
    { 
     $myhash = new Hash(); 
     $msg = ''; 

     $myhash->generateSecret(); 
     $enc = $myhash->encryptSecret($key->key); 
     return View::make('users.auth', ['enc'=> $enc]); 
    } 
    ... 
} 

var_dump($myhash->generateSecret());public function generateSecret()回報string(15) "866094233422231" string(15) "583375207466239"這是正確的控制器返回NULL

var_dump($secret)

在UsersController var_dump($myhash);也返回正確的數據

String(15) "008844975703088" object(Hash)#329 (1) 
{ 
    ["secret":"Hash":private]=> string(15) "008844975703088" 
} 

顯示,這個問題是在控制器和生成哈希$myhash->generateSecret();。該函數必須生成密鑰(字符串),然後將其散列並顯示在頁面上。

任何想法,爲什麼該功能無法正常工作?我不知道我還能嘗試什麼。

+0

我想'var_dump'顯示null,因爲你的函數沒有返回。 – ArtOsi

+0

是的,我認爲是相同的,但當我var直接在它顯示結果的函數中轉儲它時,它不是null,這對我來說很奇怪。 – Ivan

+0

返回你的函數generateSecret的值。 – aldrin27

回答

2

generateSecret()不返回任何東西,所以$myhash->generateSecret()NULLgenerateSecret()確實$secret作爲一個屬性($this->secret = $secret),但由於$secret被宣佈爲私人,你不能在類之外訪問它,所以你的控制器中的$myhash->secret將無法​​工作。

所以你有2個選擇 - 要麼返回密碼,以便調用代碼可以看到它,要麼添加一個吸氣器,以使$secret可以在課程外部訪問。這裏是你如何可以返回它:

public function generateSecret(){ 
    $secret = generateSecretKey(); 
    $secret_hash = password_hash($secret, PASSWORD_BCRYPT); 
    Session::put('secret-hash', $secret_hash); 
    return $secret; 
} 

然後在你的控制器:

$secret = $myhash->generateSecret(); 
+0

感謝您的回答,併爲延誤感到抱歉。我會以這種方式嘗試,並會讓你知道結果。 – Ivan

+0

只是一個問題:什麼可以在我的本地服務器上工作,但不在線? – Ivan

+0

對不起,但仍然是布爾(錯誤)。我的意思是我不再在控制器中獲得NULL,但現在我得到'bool(false)' – Ivan

0

此功能:

public function generateSecret() 
{ 

    $secret = generateSecretKey(); 

    $secret_hash = password_hash($secret, PASSWORD_BCRYPT); 

    Session::put('secret-hash', $secret_hash); 
    $this->secret = $secret;   
} 

不返回任何數據,因此var_dump($myhash->generateSecret());將永遠是零。

如果您需要在類之外訪問它,則應該使用getter公開狀態。

+0

「的示例返回我不明白,因爲此函數在laravel中完全像這樣工作** 4.2 * *。 – Ivan

+0

對不起,但我沒有getter在我的用戶控制器中,我有'$ myhash = new Hash();' – Ivan

+0

不,這只是實例化你的類。或者添加一個返回'$ this-> secret'的getter,或者從'generateSecret()'中簡單地'返回$ secret;'。 –