【问题标题】:Include/call external class in laravel在 laravel 中包含/调用外部类
【发布时间】:2016-08-02 19:05:32
【问题描述】:

即使我在 stackoverflow 中看到了多个这样的问题,我仍然无法让我的自定义 php 类在 laravel 中工作。我做了以下事情:

laravel -> app -> 库 -> DateFunction.php 作为我的文件路径

实际的 DateFunction.php 包含以下代码

<?php

namespace App\Libraries;

class DateFunction
{
    public $timeWorked;

    public function getRealHours($time) {
        if ($time / 60 < 1) {
             $this->timeWorked = $time . "m";
        } else {
            $hours = $time / 60;
            $minutes = $time % 60;

            $this->timeWorked  = $hours . "h" . $minutes . "m";
        }

        return $this->timeWorked;
    }

}

在我的控制器中我使用过 use App\Libraries\DateFunction;

但在我使用时的视图中

 @foreach ($labourentries as $labour)
                <tr>
                    <td>{{ $labour->labourtype_id }}</td>
                    <td>{{ getRealHours($labour->minutes_worked)  }}</td>
                </tr>
   @endforeach

它仍然给我错误:调用未定义的函数 getRealHours()

任何帮助将不胜感激。干杯

【问题讨论】:

    标签: php class laravel external


    【解决方案1】:

    当你写use App\Libraries\DateFunction时,这个控制器中只有DateFunction类可用,你应该按如下方式使用它:

    Class AlohaController 
    {
    
        public function something()
        {
            $InstanceClass = new DateFunction;
            $realHour = $InstanceClass->getRealHours(48);
        }
    }
    

    如果要全局使用 getRealHours() 则不需要类。

    如果您想创建一个函数助手,您必须执行以下操作:

    1. 编辑文件composer.json放置你的帮助文件的路径

    2. 运行composer dumpautoload生成引导文件

    3. Helpers 文件应如下所示:

      function getRealHours($time) {
      
          $timeWorked = 0;
      
          if ($time / 60 < 1) {
              $timeWorked = $time . "m";
          } else {
              $hours = $time / 60;
              $minutes = $time % 60;
      
              $timeWorked  = $hours . "h" . $minutes . "m";
          }
      
          return $timeWorked;
      
      }
      

    另一种可能的解决方案

    在您的控制器中创建 DateFunction 类的实例并将其发送到您的视图。

    您的控制器应如下所示:

    $helpers = new DateFunction;
    return view('path.to.view', ['helpers' => $helpers]);
    

    在您看来,您可以这样使用它:

    <td>{{ $helpers->getRealHours($labour->minutes_worked)  }}</td>
    

    【讨论】:

    • 我将它作为帮助文件包含在内,并且它有效。多谢。我真的不明白如何作为一个班级去做。你介意详细说明一下吗?欢呼
    • 如果你想使用一个类,你可以做的是在 Model Labor 中创建一个方法(我假设 $labourentries 是一些模型的集合),这个方法将使用 DateFunction 类来制作计算。这样做,在视图中迭代你会使用这样的集合: $labour->minutesWorkedToRealHour() 而不是 getRealHours($labour->minutes_worked)
    • 我觉得可能有更简单的办法,看更新响应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-11
    • 2016-04-03
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    相关资源
    最近更新 更多