【问题标题】:Laravel 5 Calling a class within a controllerLaravel 5 在控制器中调用类
【发布时间】:2015-11-30 12:05:27
【问题描述】:

预告: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');
        }
    }
}

编辑:

这是我在检查过的解决方案的帮助下提出的解决方案。

创建新文件:app\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());

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    如果我站在你的立场上,我会将所有自定义功能类存储到 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');
            }
        }
    }
    

    【讨论】:

    • 您的回答帮助我解决了我的问题。我将编辑我的问题以反映我从中提出的解决方案。
    猜你喜欢
    • 2016-02-16
    • 2018-01-24
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多