OO PHP和MVC:从另一个控制器调用方法?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了OO PHP和MVC:从另一个控制器调用方法?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1537字,纯文字阅读大概需要3分钟。
内容图文
![OO PHP和MVC:从另一个控制器调用方法?](/upload/InfoBanner/zyjiaocheng/658/67862d22f5034203bd00049ac6b03bbd.jpg)
这可能是由于我对PHP面向对象模型的理解存在差距,但请忍受一下,看看您是否发现它有意义/任何明显的错误.无论如何,在MVC应用程序中,我有两个控制器,Post.php和Thread.php.在线程控制器中,我有一个公共方法mark_as_read(),您可以猜到.它将线程标记为已读(在DB中插入行)或更新数据库中最后一个视图的时间.在线程控制器中,我可以通过以下操作轻松地调用它:
$this->mark_as_read($user_id, $thread_id);
但是,在Post控制器中,我还希望能够将一个线程标记为已读,特别是在我发布新帖子并且不希望数据库反映用户尚未阅读自己的“新”帖子时.第一个问题:如何从发布控制器在线程上调用mark_as_read()方法?
无论如何,我以一种本能对我来说似乎很糟糕的方式来解决这个问题. Post和Thread控制器都继承自Base控制器.我将mark_as_read()方法移至基本控制器中,现在可以通过调用相同的线程将其标记为已读:
$this->mark_as_read($user_id, $thread_id);
从任何控制器!这对我来说似乎真的很糟糕,原因是我在其他控制器上不确定是否真的要将线程标记为已读,并且本能地感觉它不属于该线程.我很确定自己做错了…所以第二个问题:如何以“正确”的方式来做?我正在使用Laravel 3(http://laravel.com/),但这似乎是一个通用的OO PHP问题,而不是特定于框架的.
解决方法:
我要问的第一个问题是:* mark_as_read(*)应该属于哪个类?
MVC模式允许您分离各层:控制器负责组织作业,它将大多数实际操作委派给视图(显示内容)和模型(任何与数据库或数据结构有关的内容).
因此,恕我直言,* mark_as_read()*应该是Thread模型类的方法.控制器应仅在其动作内调用$myThread-> mark_as_read().
从而,
>任何控制器只要有可用的线程模型实例,就可以轻松地将线程标记为已读.
>任何帖子都可以轻松地将其线程标记为已读,因为我猜一个Post模型对象有一些指向其父线程的指针(模拟数据库的post表中的外键关系)
内容总结
以上是互联网集市为您收集整理的OO PHP和MVC:从另一个控制器调用方法?全部内容,希望文章能够帮你解决OO PHP和MVC:从另一个控制器调用方法?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。