Laravel 5 - 我应该在哪里编写这个函数,以及如何编写?

Posted

技术标签:

【中文标题】Laravel 5 - 我应该在哪里编写这个函数,以及如何编写?【英文标题】:Laravel 5 - Where should I write this function, and how? 【发布时间】:2018-08-09 21:57:09 【问题描述】:

晚安,

我有一个概览页面,其中显示了我的所有项目项。

我有一个模型 (Project.php) 一个控制器 (ProjectController),我将变量 $project (这包括每个项目的所有信息)发送到特定视图。

注意:每个项目在数据库中都有自己的行。 (我猜很明显)

现在我还有一个与特定项目相关的“任务”表。在我看来,我想显示“完成”了多少总任务。 (这与“完成”列(真/假,布尔值)有关。

现在因为我的视图中有一个 foreach 函数(显示每个单独的项目),所以我可以在视图中创建该函数。但是 Laravel 框架的存在是有原因的。而且在一个视图中写出大量的php是不对的。

但是,我应该在哪里创建这个函数?以及如何在我的 foreach 中使用它(在视图中)。当然,我可以在我的模型或控制器中创建一个新的 foreach 并将该变量发送到我的视图。但是我不能在我的 view-foreach 中使用那个,因为事情会搞混。

我不知道如何/在哪里可以以干净的方式设置这样的功能。

问候,

迪伦

【问题讨论】:

任何示例代码? 是的,请给我们一些代码^^目前,没有办法确切知道你是否接近......或者离你想要实现的目标很远 如前所述,没有代码很难回答。但是你有建立关系吗?因为通常你会在你的视图中通过projects 的关系访问tasks.... 有很多工具可以实现这一点:刀片指令、视图合成器、您可以编写的辅助函数、模型演示器等。如果您使用写成“the错误的方式”(不过,我更愿意认为您只是更喜欢替代方案),因此我们可以从那里构建一个或多个重构方法以获得更好的架构。 【参考方案1】:

您可以在应用目录(例如 app/Helpers/)或任何您想要的地方创建一个函数并将其命名为 yourHelperFunction.php。

创建该文件后,Laravel 将无法识别该文件,直到它被注册到 composer.json 文件中。在自动加载部分添加文件数组。

.
.
.
"autoload": 
   "files":[
     "app/Helpers/yourHelperFunction.php"
   ]

.
.
.

然后做composer dump autoload,你就可以使用刀片内部的功能了

【讨论】:

【参考方案2】:

使用 Blade 引擎,而不是核心 PHP 循环。 明智的做法是使用刀片引擎,然后使用核心 php 代码。

您可以查看文档 Laravel 5 Blade Template

【讨论】:

【参考方案3】:

感谢您的帮助。我已经想通了(我猜?)。

我的项目模型中有这个功能。

    public function getTaskDonePercentage($id) 
    $tasks = Task::where('project_id', $id)->count();

    $tasks_done = Task::where([
      ['project_id', $id],
      ['status', 'done']
    ])->count();

    if ($tasks_done > 0) 
      $calc = ($tasks_done / $tasks) * 100;
    
    else 
      $calc = '100';
    

    return round($calc) . '%';
  

然后在我看来,我只是在 foreach 中调用函数,例如:

@foreach
 $project_item->getTaskDonePercentage($project_item->id) 
@endforeach

Tbh 我仍然想知道这种方法是否好用。 (或者,如果不是,为什么不是?)。

谢谢!

【讨论】:

以上是关于Laravel 5 - 我应该在哪里编写这个函数,以及如何编写?的主要内容,如果未能解决你的问题,请参考以下文章

我应该在 Laravel 5 中将 JS 存储在哪里?

在 Laravel 5 中的哪里放置特征?

Laravel 5 - 更改默认登录操作

我们应该在线程类中的哪里编写原始线程函数

在laravel中/和./分别代表哪里

Laravel 5 检查权限