2015-11-29 3 views
0

Предварительная информация: Laravel 5 - это моя первая структура, которую я использовал помимо нашей пользовательской структуры, которую мы создали за эти годы. Я все еще обнимаю концепты, но в основном это все. У меня есть страничные вызовы, проверки авторизации, подача формы и запросы db.Laravel 5 Вызов класса в контроллере

Вопрос: В прошлом я бы создать новый класс «Access», и я бы вызвать функцию желательно там, где я должен был бы:

$access = Access::getAccessByAccount($accountID); 

моя надежда сделать то же самое в Laravel так или иначе, и иметь возможность вызвать эту публичную функцию из контроллера. Я просто не знаю, как назвать это и где фактически хранить функцию.

Вот пример функции Я хотел бы назвать:

public function getAccessByAccount($accountID){ 
    //Grab all access rights set to given account ID 
    $accessList = DB::table('element_access') 
       ->join('element', 'element.id', '=', 'element_access.element_id') 
       ->select('element.name as element', 'element_access.permission as permission') 
       ->where('element_access.account_id', $accountID) 
       ->get(); 



    //Return $access[element] = permission list or false if no access rights are assigned to account ID 
    if(is_array($accessList)){ 
     $access = array(); 
     foreach($accessList as $item){ 
      $access[$item->element] = $item->permission; 
     } 
     return $access; 
    }else{ 
     return false; 
    } 
} 

Вот как я хотел бы, чтобы каким-то образом быть в состоянии назвать его в контроллере:

<?php namespace App\Http\Controllers\Portal\Admin; 

use App\Http\Controllers\Controller; 

class AdminController extends Controller { 
    public function showAdminDashboard(){ 
     $access = Access::getAccessByAccount(Auth::id()); 
     if($access['admin-dashboard'] == 'r'){ 
      return view('portal.admin.dashboard'); 
     } 
    } 
} 

EDITS:

Вот решение, с которым я пришел с помощью проверенного решения.

создал новый файл: приложение \ Library \ access.php

<?php namespace App\Library; 

use DB; 
class Access{ 
    public function getElementAccessByAccount($accountID){ 
     //Grab all access rights set to given account ID 
     return DB::table('element_access') 
       ->join('element', 'element.id', '=', 'element_access.element_id') 
       ->select('element.name as element', 'element_access.permission as permission') 
       ->where('element_access.account_id', $accountID) 
       ->get(); 

    } 
} 

Для вызова функции:

$access = new \App\Library\Access; 
$accessList = $access->getElementAccessByAccount(Auth::id()); 

ответ

0

Если бы я был на вашем месте, я бы хранить все классы пользовательских функциональных возможностей для app/services.

Доступ класс

<?php namespace App\Services; 

class Access 
{ 
    public static function getAccessByAccount($accountID) { 
     //Grab all access rights set to given account ID 
     $accessList = \DB::table('element_access') 
      ->join('element', 'element.id', '=', 'element_access.element_id') 
      ->select('element.name as element', 'element_access.permission as permission') 
      ->where('element_access.account_id', $accountID) 
      ->get(); 

     //Return $access[element] = permission list or false if no access rights are assigned to account ID 
     if (is_array($accessList)) { 
      $access = array(); 
      foreach($accessList as $item){ 
       $access[$item['element']] = $item['permission']; 
      } 
      return $access; 
     } else{ 
      return false; 
     } 
    } 
} 

Контроллер

<?php namespace App\Http\Controllers\Portal\Admin; 

use App\Http\Controllers\Controller; 

class AdminController extends Controller 
{ 
    public function showAdminDashboard() { 
     $access = \App\Services\Access::getAccessByAccount(\Auth::id()); 
     if($access['admin-dashboard'] == 'r') { 
      return view('portal.admin.dashboard'); 
     } 
    } 
} 
+0

Ваш ответ помог мне решить мою проблему. Я отредактирую свой вопрос, чтобы отразить решение, которое я придумал. – Dom

Смежные вопросы