我是CodeIgniter,MVC和OOP的新手。我正在尝试制作两个依赖于不同内容的图像库,但设置和功能相同。设置它的最佳方法是什么?我应该创建一个包含所有功能的库并在我的控制器中调用它吗?
答案 0 :(得分:0)
在MVC中,您需要确保数据收集(模型),逻辑(控制器)和显示(视图)在逻辑上是分开的。为此,您需要使用一些常用方法将您在模型中创建的图库数据放在一起,然后通过控制器传递给您的视图。所以让我们考虑一个像这样的超简化模型函数:
function getImages($param)
{
if ($param)
{
return array(
array('id'=>1, 'caption'=>'Image 1', 'url'=>'/images/image1.jpg'),
array('id'=>2, 'caption'=>'Image 2', 'url'=>'/images/image2.jpg')
)
}
else
{
return array(
array('id'=>3, 'caption'=>'Image 3', 'url'=>'/images/image3.jpg'),
array('id'=>4, 'caption'=>'Image 4', 'url'=>'/images/image4.jpg')
)
}
}
我只是在这里使用$param
为真或假,以满足您对以相同方式格式化的“不同内容”的要求。现在您已经在图像模型中使用了此功能,您可以从控制器中调用它,如下所示:
$images = $this->Images->getImages($param);
现在您拥有一致格式的数据,您知道您始终可以将此图像数组传递给始终需要某种格式的图像视图(在这种情况下,是一个或多个具有基本图像数据的数组)它们)。
现在,您需要创建一个基本上如下所示的image_gallery视图:
<div id="image_gallery">
<?php foreach($images as $image) { ?>
<img src="<?php echo $image['url'] ?>" />
<div class="image_caption"><?php echo $image['caption'] ?></div>
<?php } ?>
</div>
当然,您的实际画廊可能看起来会有很大差异,但这里的想法是,如果您的图像信息一致,那么创建图库时不会有任何麻烦。拼图的最后一部分是将图像数据发送到视图中,这样就可以从控制器中完成:
$data = array();
$data['images'] = $images; //this is the var from above when we called $this->Images->getImages($param)
$this->load->view('image_gallery', $data);
现在我们在$data
数组中有一个名为“images”的插槽,我们将能够在image_gallery视图中访问$images
。
当然,您并不总是需要从控制器调用视图。实际上,从内部视图调用视图通常是有意义的,但这完全取决于您的要求。有时,调用视图并将它们作为字符串从库中返回它们甚至是有意义的,但这只是一个公平的警告:这样做可以使您轻松地远离MVC方法的简单性。
答案 1 :(得分:-1)
是的,创建一个库并接受初始化参数(主要是要显示或修改的当前图库的名称)是您想要的方式。