【问题标题】:Laravel 5 - Where to define functions and call them in views & controllersLaravel 5 - 在哪里定义函数并在视图和控制器中调用它们
【发布时间】:2015-02-28 11:18:23
【问题描述】:

我有以下功能,想从视图中调用它。基本上我想把所有常用功能放在一个文件中。我不确定在哪里创建该文件以及如何在控制器和视图中调用它。

<?php namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use DB;

class CommonController extends Controller {

public function BytesToMB($bytes=0)
{
    if(empty($bytes))
    return 0;

    $kb = ceil($bytes/1024);

    $mb = ceil($kb/1024);

    return $mb;
}

}

到目前为止,我已经在 app/Http/Controllers 中创建了 CommonController.php 并将上面的函数放入其中。

然后在其他控制器中我尝试按以下方式调用它:

use App\Http\Controllers\Common;

class SongsController extends Controller {
    public function index($id)
    {
       echo Common::BytesToMB('7012187');
    }
}

但我收到错误:

 Class 'App\Http\Controllers\Common' not found

【问题讨论】:

    标签: php helper laravel-5


    【解决方案1】:

    好的,新的尝试。您错过了使用完整的类名并添加了 static 关键字:

    <?php 
    
    namespace App\Http\Controllers;
    
    use App\Http\Controllers\Controller;
    use DB;
    
    class CommonController extends Controller {
    
        public static function BytesToMB($bytes=0)
        {
            if(empty($bytes))
            return 0;
    
            $kb = ceil($bytes/1024);
    
            $mb = ceil($kb/1024);
    
            return $mb;
        }
    
    }
    

    然后:

    <?php
    namespace App\Http\Controllers;
    
    // You do not need to define this, if you are in the same namespace
    use App\Http\Controllers\CommonController;
    
    class SongsController extends Controller {
        public function index($id)
        {
           echo CommonController::BytesToMB('7012187');
        }
    }
    

    另一个更OOP的解决方案是使用父类中的函数:

    <?php 
    
    namespace App\Http\Controllers;
    
    use App\Http\Controllers\Controller;
    use DB;
    
    class CommonController extends Controller {
    
        protected function BytesToMB($bytes=0)
        {
            if(empty($bytes))
            return 0;
    
            $kb = ceil($bytes/1024);
    
            $mb = ceil($kb/1024);
    
            return $mb;
        }
    
    }
    

    然后:

    <?php
    namespace App\Http\Controllers;
    
    // You do not need to define this, if you are in the same namespace
    use App\Http\Controllers\CommonController;
    
    class SongsController extends CommonController {
    
        public function index($id)
        {
           echo $this->bytesToMB('7012187');
        }
    }
    

    【讨论】:

    • 我添加了公共静态但不工作。我认为这是第二件事,因为错误说找不到类。所以它没有正确包含类。
    • 我编辑了我的答案,因为我意识到课程本身的缺失为时已晚:p
    • 不工作,我也编辑了问题。我只尝试了 Common 而不是 CommonController 但它是一样的。
    • 好的,现在可以工作了。只需编辑您的答案 // 如果您在同一个命名空间中,则无需定义它,请使用 App\Http\Controllers\CommonController;
    • 请告诉我如何在视图中访问此功能!
    猜你喜欢
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    相关资源
    最近更新 更多