Php 获取mvc结构中的对象数据
我正在使用一个PHP MVC框架。效果非常好。我喜欢将业务层(模型)与业务逻辑(控制器)分离。但我只是偶然发现了一个问题。事情是这样的: 假设我导航到以下url: 在本例中,将调用userController.php,在该文件中有一个执行的方法showallAction() 在showalAction()方法中,我只需对一个模型执行一个请求,该模型将为我获取所有用户。大概是这样的:Php 获取mvc结构中的对象数据,php,model-view-controller,Php,Model View Controller,我正在使用一个PHP MVC框架。效果非常好。我喜欢将业务层(模型)与业务逻辑(控制器)分离。但我只是偶然发现了一个问题。事情是这样的: 假设我导航到以下url: 在本例中,将调用userController.php,在该文件中有一个执行的方法showallAction() 在showalAction()方法中,我只需对一个模型执行一个请求,该模型将为我获取所有用户。大概是这样的: public function showallAction() { // create userMode
public function showallAction()
{
// create userModel object
$users = new userModel();
// get all users and assign the data to a variable which can be accessed in the view
$this->view->users = $users->getAllUsers();
// render views
$this->view->render();
}
因此,这个方法获取所有用户,将从userModel返回的数据分配给一个变量,我可以在视图中轻松处理返回的数据。只是一个典型的MVC
现在问题来了。
我还需要创建一个原生iphone变体。当然,外观会完全不同。所以我实际上只想请求这个url:
它只是将数组(json格式)返回给我。因此,我可以将其用于移动开发
但是现在显然不能这样做,因为showalAction()方法假定它用于web浏览器显示。它不回显JSON格式,而只是将用户数组分配给一个变量
因此,这意味着我必须创建另一个方法“showallMobileAction()”,以获取数据,但特别是针对移动设备。但这不是一个优雅的解决方案。我相信有更好的方法
有人知道如何解决这个问题吗???您可以将参数传递到url:
/user/showall/json
并使用自定义函数或内置函数获取第三个URL段。例如,使用CodeIgniter:$this->uri->segment(3)
。
一些框架会将附加参数传递给您的方法。用我上面写的URL试试这个:
public function showallAction()
{
print_r(func_get_args());
}
我不熟悉PHP MVC,但一般来说,我会使用“accepts”HTML头字段请求“text/HTML”或“text/json”中的响应,控制器会检查accepts类型并相应地返回响应。在您的情况下,我会修改路由机制 如果您可以在URL的末尾添加扩展名,这将非常有用,它代表您期望的格式,如:
http://foo.bar/news/latest >> HTML document
http://foo.bar/news/latest.html >> HTML document
http://foo.bar/news/latest.rss >> you RSS feed
http://foo.bar/news/latest.json >> data in JSON format
这是一个很容易识别的模式。您可以稍后将其展开以添加。。不知道pdf输出,或Atom提要
此外,有两点意见:
这听起来是一个可行的解决方案。向url添加扩展名,如.html或.json,对我来说没有问题。但那之后我该怎么办?假设我拥有存储在baseController中的URL中传递的扩展名:$urlExt;——这是否意味着我必须在每个Action()方法(例如在userController中)中构建一个check来检查$urlExt???@w00的类型。。然后,您应该修改视图,根据扩展为您提供不同的输出。通过初始化不同的视图实例,或者传入其他直接负责实际呈现输出的对象。这一部分与您自己的MVC模式实现紧密相关。