2015-10-27 132 views
5

我已經改性Laravel的放置在自定義功能添加到

/vendor/laravel/framework/src/Illuminate/Auth/Guard.php

供應商文件驗證類Laravel(擴展保護類)

,但在更新Laravel時將被覆蓋。

我正在尋找一種方法將代碼放在我的/ app的某處,以防止覆蓋。

修改功能是

public function UpdateSession() { 
    $this->session->set('type', $type); //==> Set Client Type 
} 

也有針對該文件的一個新功能:以上

public function type() { 
    return $this->session->get('type'); //==> Get Client Type 
} 

代碼被稱爲在我的應用程序的許多地方。

有什麼想法?

+0

那整個應用程序的類。你不應該直接搞亂Laravel的源代碼。 –

回答

6

步驟:
由1- AppServiceProvider創建myGuard.php

class myGuard extends Guard 
{ 
    public function login(Authenticatable $user, $remember = false) 
    { 
     $this->updateSession($user->getAuthIdentifier(), $user->type); 
     if ($remember) { 
      $this->createRememberTokenIfDoesntExist($user); 
      $this->queueRecallerCookie($user); 
     } 
     $this->fireLoginEvent($user, $remember); 
     $this->setUser($user); 
    } 

    protected function updateSession($id, $type = null) 
    { 
     $this->session->set($this->getName(), $id); 
     $this->session->set('type', $type); 
     $this->session->migrate(true); 
    } 

    public function type() 
    { 
     return $this->session->get('type'); 
    } 
} 

2或新的服務提供商或routes.php文件:

public function boot() 
{ 
    Auth::extend(
     'customAuth', 
     function ($app) { 
      $model = $app['config']['auth.model']; 
      $provider = new EloquentUserProvider($app['hash'], $model); 
      return new myGuard($provider, App::make('session.store')); 
     } 
    ); 
} 

3-在config/auth中。 PHP

'driver' => 'customAuth', 

4-現在如果你想覆蓋你應該創建一個擴展衛隊類和* *,然後重寫方法的類的方法,並使用您可以使用此

Auth::type(); 
+0

MyGuard應該如何加入?我有一個「擴展」文件夾。但是用「/使用App \ Extensions \ MyGuard;」在AppServiceProvider中找不到。 在MyGuard文件中,我有「使用Illuminate \ Auth \ SessionGuard; 使用Illuminate \ Contracts \ Auth \ Guard;」但我也不確定。 – Olivvv

0

這看起來並不像你需要更新Guard。據我所見,你只是試圖從會話中檢索數據。對於衛隊本身來說這絕對不是事。

你自己已經訪問會話的多種方式:

// via Session-Facade 
$type = Session::get('type'); 
Session::put('type', $type); 

// via Laravels helper function 
$type = session('type'); // get 
session()->put('type', $type); // set 
session(['type' => $type']); // alternative 
相關問題