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 - 我应该在哪里编写这个函数,以及如何编写?的主要内容,如果未能解决你的问题,请参考以下文章