我一直在看Laravel一段时间,我决定最终选择它。这是我第一次使用PHP框架,我在掌握模型的目的时遇到了一些麻烦。
我一直在阅读很多新手指南,这就是他们模型中的所有内容(Laravel明智),
class Model extends Eloquent {
}
然后在他们的控制器中他们做了类似的事情,
$model = new Model;
$model->text = "text";
$model->save();
我不是MVC模式的专家(可能是最大的新手),但我认为整点(或至少是一个小点)是分开很多行动。并且该模型应该负责处理所有数据库。所以在某种程度上,这对我来说似乎是错误的,或者至少不是最好的做法。
但是如果你开始设置一堆函数,你可能会遇到每个表都有一个模型的问题。再次,这似乎不对。因此,您必须以某种方式使模型模糊不清。从某种意义上说,它可以对任何表采取任何行动吗?
此刻,这一切似乎让我感到困惑。
答案 0 :(得分:14)
你需要一个evey表的模型,因为还有其他与模型无法共享的东西,比如列名和验证,但如果你认为自己在重复,你可以创建一个BaseModel并添加所有方法甚至过载Eloquent方法:
class BaseModel extends Eloquent {
public function whatever() {
}
public function save(array $options = []) {
// do what you need to do
parent::save();
}
}
然后使用它创建模型:
class Order extends BaseModel {
}
但是你在模型上不需要太多,如果你的模型和表格名称遵循Laravel模式(在这种情况下,表名称将是'orders'),那么你只需要这个简单的声明来使模型适用于你的桌子。
编辑:
控制器用于将数据从模型传输到视图,但是他们不应该对您的数据了解太多,几乎关于它们的所有内容都应该在您的模型中(“胖模型,瘦模控制器”),所以他们需要知道足够“控制”。
class OrdersController extends BaseController {
public function process()
{
$order = Order::find( Input::get('orderId') )->process();
return View::make('orders.showProcessedOrder')->with('order',$order);
}
}
答案 1 :(得分:-1)
模型是数据库表的包装器(这是您正在编写应用程序的真实内容)。它们为您提供了一个用于存储数据的OO,基于代码的界面,您可以将特定于数据的逻辑放在模型中。 OOP是关于类和对象的,并将传入的HTTP请求和数据存储等内容转换为该形式。
你的问题很好。当您学习如何制作Web应用程序时,拥有一个三层Web应用程序 - 一个表示层,一个业务逻辑层和一个存储在关系数据库中的数据的数据存储层 - 效果很好,并且添加没有任何意义代码中额外的数据库相关内容。
而且,就像安东尼奥写的那样,在MVC编程中,“胖模特,瘦瘦的控制器”就是你正在努力的方向。理想情况下,控制器应该是几行代码,它们将传入的请求传递给正确的模型,在那里它可以被验证,添加到数据库等等。(但是在你第一次将它放在控制器中是最简单的学习/计算MVC。)