Php Smarty/View/templates中的数据库调用

Php Smarty/View/templates中的数据库调用,php,model-view-controller,smarty,templating,Php,Model View Controller,Smarty,Templating,今天上班时,有人试图说服我: {$obj->getTableInfo()} 对于smarty/mvc/Templateing来说很好,因为它使用的是对象方法。我认为,因为它调用数据库,所以它没有位置,应该在控制器中(我们实际上不使用MVC)。我对MVC和模板中使用的逻辑分离的理解正确吗?还是我遗漏了什么?嗯,没有“官方”规则或任何东西,但我认为类似的东西属于控制器。除了显示变量之外,我不在视图代码中执行任何操作,只允许使用if或foreach类型的循环。当然没有调用访问数据库的函数。这些

今天上班时,有人试图说服我:

{$obj->getTableInfo()}

对于smarty/mvc/Templateing来说很好,因为它使用的是对象方法。我认为,因为它调用数据库,所以它没有位置,应该在控制器中(我们实际上不使用MVC)。我对MVC和模板中使用的逻辑分离的理解正确吗?还是我遗漏了什么?

嗯,没有“官方”规则或任何东西,但我认为类似的东西属于控制器。除了显示变量之外,我不在视图代码中执行任何操作,只允许使用
if
foreach
类型的循环。当然没有调用访问数据库的函数。这些都应该由控制器加载,视图应该只决定是否需要显示它。

嗯,没有“官方”规则或任何东西,但我认为类似的东西应该属于控制器。除了显示变量之外,我不在视图代码中执行任何操作,只允许使用
if
foreach
类型的循环。当然没有调用访问数据库的函数。这些都应该由控制器加载,视图应该只决定是否需要显示它。

你说得对。他错了

如果您想正确使用MVC,数据库调用,无论以何种形式,都应该存在于控制器中


很明显,人们会在应该做的事情上撒尿,做类似的事情,但这不是正确的方式。

你是对的。他错了

如果您想正确使用MVC,数据库调用,无论以何种形式,都应该存在于控制器中


很明显,人们对它的本来面目大发雷霆,做类似的事情,但这不是正确的方式。

实际上取决于它的上下文和范围

$obj是控制器还是模型层?这应该能回答我认为它是否有效

作为对阅读其他答案的回应


函数名本身就是一个简单的getter方法。它可以通过控制器层调用db。我想说这是可以的。特别是如果它在内存中使用某种形式的缓存。(即getter是setter,因为您只想在使用一次时缓存它。)

实际上取决于它的上下文和范围

$obj是控制器还是模型层?这应该能回答我认为它是否有效

作为对阅读其他答案的回应


函数名本身就是一个简单的getter方法。它可以通过控制器层调用db。我想说这是可以的。特别是如果它在内存中使用某种形式的缓存。(即getter是setter,因为您只想在使用一次时缓存它。)

这是他的论点…'它在第一次调用后被缓存…“但是。。。如果将其放入变量中并将其传递给视图,则它将被“缓存”,而按需缓存仅在按需缓存时才起作用。我第一次打电话就去了。任何其他方式,它都不会像预期的那样工作。该函数中的某些东西必须在某个地方进行调用。视图层没有调用数据库。它正在调用对象。该对象正在调用x。此外,如果实际的db调用在该函数中,则表示有问题。中间需要有模型层。如果它正在调用控制器层,那么在我看来这很好。我相信它是这样的:$obj->tableInfo()…class tableInfo(){return getTableInfo()}/class。。。。。。getTableInfo(){query_database}听起来像是我工作中的东西,迈克,是你吗?我会说,这看起来像一个数据访问层(控制器),所以是的,这不应该像mvc中那样。当然,你没有使用定义好的mvc方法,所以这并不重要(除了精神科医生的账单,你将在以后的生活中因为发疯而支付):P这是他的论点…'它在第一次调用后被缓存…“但是。。。如果将其放入变量中并将其传递给视图,则它将被“缓存”,而按需缓存仅在按需缓存时才起作用。我第一次打电话就去了。任何其他方式,它都不会像预期的那样工作。该函数中的某些东西必须在某个地方进行调用。视图层没有调用数据库。它正在调用对象。该对象正在调用x。此外,如果实际的db调用在该函数中,则表示有问题。中间需要有模型层。如果它正在调用控制器层,那么在我看来这很好。我相信它是这样的:$obj->tableInfo()…class tableInfo(){return getTableInfo()}/class。。。。。。getTableInfo(){query_database}听起来像是我工作中的东西,迈克,是你吗?我会说,这看起来像一个数据访问层(控制器),所以是的,这不应该像mvc中那样。当然,你没有使用定义好的mvc方法,所以这并不重要(除了精神科医生的账单,你将在以后的生活中因精神失常而支付):PIs,我投票支持我的观点真的公平吗?可能不是。。。我真的很想听听那些认为没问题的人的意见。。。哦,我投票支持我观点的人真的公平吗?可能不是。。。我真的很想听听那些认为没问题的人的意见。。。哦,好吧