我对限制重复代码的控制器结构有一些疑问。
例如,我想找回男人和女人。执行此操作的最佳方法是什么:
class User {
public function men() {
//render
}
public function women() {
//render
}
//OR
public function by_type($type) {
//render
}
}
这是一个简单的例子,但类型的数量可能会增加。每种类型都可以有单独的视图。我正在寻找未来的扩展解决方案。此用例的最佳做法。
谢谢
Rails有一个(有点争议的)原理,叫做胖模型,瘦控制器,这基本上意味着你可以使用控制器来处理视图的逻辑,并让模型处理所谓的"繁重工作"。
蛋糕 PHP/导轨
要从 CakePHP 移植到 Rails,我强烈建议您尽可能多地使用这些模型,因为它允许您创建一个利用服务器完整性能结构的应用程序,而不是像许多人使用 CakePHP 那样将所有逻辑留在控制器中。
专门针对您的问题:
#app/controllers/users_controller.rb
def index
@user = User.gender(params[:gender])
end
#app/models/user.rb
def self.gender(type)
where?("type = ?", type)
end
这使您可以使控制器尽可能薄,从而允许在整个应用程序中正确分发代码
我认为Rails与CakePHP有很大不同,因为它可以帮助您创建真正实用且内容丰富的应用程序,这些应用程序利用整个服务器,而不仅仅是提供一个层来使网站动态
据我了解您的问题,您可以通过以下方式调用真正在by_type
函数中呈现类型的函数:
public function by_type($type) {
if (method_exist($this, $type) {
return call_user_func(array($this, $type));
}
else {
throw new Exception('method do not exists!');
}
}
这样,您只需编写呈现类型的方法并使用by_type
方法调用它。