我知道一些HTML,PHP,CSS和MySQL。我还没有掌握的东西是框架。我正在尽力阅读他们是什么以及他们做了什么,但对于我的生活,我无法理解。
请有人以非常简单的方式解释框架和Doctrine 2,因为我不知道从哪里开始,但请注意它们肯定是必需的。
答案 0 :(得分:11)
我可以告诉你一个框架是什么,但问题What is a software framework?的答案已经完成了。
所以,关于Doctrine。它是一个对象关系映射器(ORM)。它基本上允许您在关系数据库中插入/更新/选择/删除对象,或通过类生成/更新表。
我们假设一个简单的Member
表:
通常,您可以编写查询,例如,在表中插入内容。如:
INSERT Member VALUES ('Andy', 'andy@example.com', 30);
ORM允许您执行的操作是将映射对象插入表中。通过查询插入表格中的值就像通常看到的那样。
让我们看一下Symfony框架中一个非常简单的Doctrine示例:
namespace ExampleProject\MemberBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Member
* @ORM\Table()
* @ORM\Entity
*/
class Member {
/**
* @var integer
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* @var string
* @ORM\Column(name="email", type="string", length=255)
*/
private $email;
/**
* @var string
* @ORM\Column(name="age", type="integer", length=3)
*/
private $age;
/* getters and setters here */
}
上面的类被映射(用DocBlocks注释)并表示我们的Member
表,描述哪些部分将被视为数据库中的列。简单地说:类中的映射变量将作为数据库中的列显示。您还可以通过映射这些变量来确定,您希望列具有哪种数据类型(字符串/整数等)。
现在在我的代码中,我能够调用Doctrine实体管理器,创建一个新的Member
对象,启动属性并将其保存到数据库中,采用一种很好的面向对象语法:
$em = $this->getDoctrine()->getEntityManager();
$member = new Member;
$member->setId($id);
$member->setName($name);
$member->setEmail($email);
$member->setAge($age);
$em->persist($member);
$em->flush();
如您所见,我们需要做的就是调用将对象保存在数据库中。在后台,ORM还执行INSERT
查询(类似于我上面提到的查询)。您甚至可以启用设置以查看执行的实际查询。
现在这可能看起来很不必要而且工作很多。但它会为你节省很多时间。从源代码的角度来看,它更面向对象,并且您将能够比不使用ORM更好地维护您的(中/大)应用程序。此外,如果您当前将MySQL作为数据库,但是您希望将其更改为例如PostgreSQL,则可以对代码进行最少的更改,因为您的ORM将负责基础查询。
因此,实质上, ORM是一个具有面向对象语法的数据库抽象层。