【发布时间】:2016-06-03 05:22:52
【问题描述】:
有史以来的第一篇文章 :) 我正在学习 Laravel 5,并希望以“正确的方式”做一些事情。
我想用 php/Laravel 即闪电管理我所有的家庭自动化系统。
我有许多类型的闪电控制,即 X10、Philips Hue 和 Belkin WeMo。每种类型都有不同的方式来打开/关闭/亮度/等。
我目前有一个"type" = hue||wemo||x10 的“Light”模型,但我不想这样做:
class Light extends Model
{
function off()
{
switch $this->type
{
case'x10': x10_close_light($this->address); break;
case'hue': hue_close_light($this->address); break;
case'wemo': wemo_close_light($this->address); break;
}
}
}
我希望有这样的接口:
interface LightInterface
{
function close();
function open();
function dim($value);
function get_status();
etc...
}
然后,为每种类型的闪电设置不同的类和/或方法。
我读到了 eloquent 的关系(一对一、多态和其他),但我没有看到大局。
在 Laravel 5/Eloquent 中执行此操作的正确方法是什么?
【问题讨论】:
-
您如何在数据库中管理此灯的开或关我的意思是您在数据库中是否有任何字段值,例如 1 表示开或 0 表示关等?
-
我在数据库中确实有一个布尔值
is_on字段用于所有灯,并且每次触发手动打开/关闭操作时都会更新此值。我还有一个 cron 作业更新 wemo 和 hue 灯的这个值,因为它们可以按需返回状态,但不能返回 x10。一切都由命令行控制,每种类型的灯都有不同的命令,我需要的是一种在任何类型的灯上简单地从我的 LightsController 调用 $Light->open() 的方法,并触发适当的命令(不使用 '在type上切换'或'假设')。
标签: php interface model laravel-5