PHP OOP核心框架

我只是发布这个问题,以便你们中的一些人能够以正确的方式指出我。我正在慢慢地热衷于面向对象编程,开始理解这个概念。我想成为一个良好的坚实核心或基础,以用作CMS后端。它还将使用MVC。我一直在使用http://gilbitron.github.com/PIP/作为MVC-base。


我不知道的是以下内容:


说,在后端的projectpage上,我有两个部分:htmltext和projects,我应该都可以对其进行编辑。uri将类似于:// domain / backend / projects(方法将是索引并显示2个部分)


当我单击项目时,应该如何处理?// domain / backend / projects / projects /或// domain / backend / projects / list /


更进一步,一个项目将保存一些图像或画廊:// domain / backend / projects / edit / 5 / gallery / 2


首先,我的问题是:这将是一个好方法吗,更重要的是,如何在OOP中实施


主要项目负责人:


class projects {


    function index(){

        // view index

    }


    function edit{

        $project = new Project();

        $projectdata = $project->load(5);

    }

}

单个项目负责人


class project {


    function __construct(){

        $this->projectmodel = $this->loadModel('project_model'); // prepare the model to be used

    }


    function load($id){

        $this->projectmodel->loadproject($id);

    }

}

项目模型


class project_model extends model { //extends for DB  access and such


    function __construct(){

        // do stuff

    }


    function loadproject($id){

        return $this->db->query("SELECT * FROM projects where id=" . $id . " LIMIT 1");

    }

}

现在我的问题。如果该项目有图像,我应该在哪里加载图像类来处理这些图像?我应该像$ this-> images = new Images();一样将其加载到project_model中吗?并在模型内部具有功能


function loadimages($id){

    $this->images->load($id);

}

然后图像将类似于:


class image extends model { //extends for DB  access and such 


    function __construct(){

    }


    function load($id){

        return $this->db->query("SELECT * FROM project_images where id=" . $id . " LIMIT 1");

    }

}

似乎控制器和模型以这种方式混杂在一起。从逻辑上讲,项目是一个容纳projectinfo的容器,它可以是文本,图像甚至是视频。我将如何在逻辑上进行设置。


天涯尽头无女友
浏览 426回答 3
3回答

冉冉说

如果该项目有图像,我应该在哪里加载图像类来处理这些图像?我应该像$ this-> images = new Images();一样将其加载到project_model中吗?并在模型内部具有功能是。该模型的目标是封装业务逻辑,以便您只需要编写一次算法,然后多次共享它们。如果您是我,该怎么做,就是将一个getImages()方法添加到Project模型中,因为图像是项目的直接属性,这使得每个项目都知道如何检索自己的图像。与我使用过的(水合和对等/表)类相比,您的代码缺少一些关键概念,因此我将尽量坚持使用您的代码。您可以通过Project对象检索图像,然后通过2种视图1引用图像:// Controller$this->project = new Project();$this->projectImages = $project->getImages(); // Implemenation #2// View// Implemenation #1 (reference to object initialized in controller)<?php foreach ($project->getImages() as $image): ?><img src="<?php echo $image['path'] ?>" /><?php endforeach ?>// Implemenation #2 (reference to separate variable initialized in controller)<?php foreach ($projectImages as $image): ?><img src="<?php echo $image['path'] ?>" /><?php endforeach ?>以上仅是说明性的,但应给您一个想法。我建议你看看《主义》。它是一种经过验证且稳定的ORM,可提供您尝试编写的大部分内容,并且还添加了我之前提到的缺少的组件。水化,对象关系和Table类,以及许多其他功能(例如嵌套集)。

米脂

projects.php 此控制器扩展了项目控制器。主要目的是使用自己的模型处理多个getAllProjects(),然后将其传递给项目控制器getProject()class Projects extends Project{public function __construct(){&nbsp; &nbsp; parent::__construct();&nbsp; &nbsp; $this->projects_model = new Projects_model();}&nbsp; &nbsp; &nbsp; &nbsp;public function getAllProjects(){&nbsp; &nbsp; $res = $this->projects_model->getAllProjects();&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; if($res) foreach($res as $v) $projects[] = $this->getProject($v);&nbsp; &nbsp; return $projects;}}project.phpproject_model除了获取项目数据和相关数据(如图像)外无非class Project{public function __construct(){&nbsp; &nbsp; $this->project_model = new Project_model;&nbsp; &nbsp; $this->images = new Images();}public function getProject($data=NULL){&nbsp; &nbsp; if($data==NULL) $data = $this->project_model->loadProject($data['id']);&nbsp; &nbsp; $images = $this->project_model->loadProjectImages($data['id']);&nbsp; &nbsp; return array('project_id' => $data, 'project' => $data, 'images' => $images);}&nbsp; &nbsp;public function getProjectByID($id){&nbsp; &nbsp; $data = $this->project_model->loadProject($id);&nbsp; &nbsp; return getProject($data);}&nbsp; &nbsp;}这种方法的好处是,我可以单独使用项目类,它将起作用。我可以将其封装在项目中,也可以使用它。这是做事的好方法(正确)吗?还是将所有这些整合到一个控制器和一个模型类中会更好?
打开App,查看更多内容
随时随地看视频慕课网APP