symfony笔记

启动

创建Symfony程序

symfony new my_project_name

运行Symfony

php bin/console server:run

ps:默认端口为8000,启动后通过http://localhost:8000/访问

 

Bundle系统

Symfony中的每一样东西都是bundle,包括框架核心功能,以及你编写的程序代码。bundle是Symfony体系中的一等公民。这就给了你一个弹性架构,既可以使用 第三方bundle 中的预建功能,也可以发布你自己的bundle。一个bundle,就是一组结构化的文件,存于一个“用于实现某个独立功能”的目录中。你可以创建一个BlogBundle,一个ForumBundle,或者是一个管理用户的bundle(很多类似bundle已经作为开源项目存在)。每个目录都包含着关乎那个功能的所有东西,包括php文件,模板,css,js文件,tests,以及其他。每一个功能的子项都存在于bundle中,每一个功能都存在于bundle中。

要在你的程序中使用bundle,必须通过 AppKernel 类的 registerBundles() 方法来注册并使用它们

Bundle目录结构

  • Controller/
    里面有该bundle的控制器(类)(如 `RandomController.php`)。
  • DependencyInjection/
    里面有特定的Dependency Injection Extension类,用来导入服务配置信息,注册compiler passes,以及更多内容(这个目录并非必需)。
  • Resources/config/
    存放配置信息,包括路由配置(`routing.yml` 等)。
  • Resources/views
    存放模板。依控制器名字来组织子文件夹(如 `Hello/index.html.twig`)。
  • Resources/public
    存放web assets资源(图片,css等),将通过硬拷贝或symlink方式导入到项目的 `web/` 目录,通过console命令 `assets:install` 实现。
  • Entity/
    存放实体类
  • Tests/
    存放本bundle的所有测试类。

 

控制器

控制器是一个你创建的php函数,它能够获取http请求信息并构建和返回一个http响应(作为Symfony的Response对象),Response可能是一个html页面、xml文档、一个序列化的json数组、图像、重定向、404错误或者一些其他你能够想像的。控制器包含了你应用程序需要渲染页面的任何逻辑。

控制器命名法
Bundle(Bundle名)Controller Class(控制器类名)MMethod Name(控制器方法名)
AppBundleBlogControllershowAction

路由

Symfony 从一个 单一的 路由配置文件: app/config/routing.yml中加载你的程序中的全部路由。但从这个文件中,你可以加载任何一个 其他的 路由文件。实际上,Symfony默认从你 AppBundle 中的 Controller/ 目录中加载annotation路由配置,这就是为何Symfony能够看到我们的annotation路由:

 

配置

Symfony程序是由一组“负责呈现全部功能和可能性”的bundles所构成。每个bundle都可以通过YAML、XML或PHP格式的配置文件进行自定义。默认的主力配置文件是在app/config/目录下,它可以是config.ymlconfig.xmlconfig.php,根据你的偏好而定:
每一个根节点,比如frameworktwig,定义了相应bundle的配置信息。例如,framework键所定义的,是用于Symfony核心的FrameworkBundle之配置信息,包括路由配置、模板配置以及其他内核配置。
现在,毋须担心每个根节点下的特定配置选项。配置文件预装了一些有意义的默认配置。

 

数据库(Doctrine ORM)

配置数据库 

真正开始之前,你需要配置你的数据库连接信息。按照惯例,这部分信息通常配置在 app/config/parameters.yml 文件中

创建一个Entity类

在Entity目录下创建实体类
@ORM\Entity表示为实体类
@ORM\Table(name="数据库表")
@ORM\Column(name="字段名",type="数据类型",nullable="是否为空(true,false)")

验证映射

php bin/console doctrine:schema:validate

生成Getters和Setters

 php bin/console doctrine:generate:entities AppBundle/Entity/Product

持久化对象到数据库

public function createAction()
{
    $product = new Product();
    $product->setName('Keyboard');
    $product->setPrice(19.99);
    $product->setDescription('Ergonomic and stylish!');
 
    $em = $this->getDoctrine()->getManager();
 
    // tells Doctrine you want to (eventually) save the Product (no queries yet)
    // 告诉Doctrine你希望(最终)存储Product对象(还没有语句执行)
    $em->persist($product);
 
    // actually executes the queries (i.e. the INSERT query)
    // 真正执行语句(如,INSERT 查询)
    $em->flush();
 
    return new Response('Saved new product with id '.$product->getId());
}

从数据库中获取对象

public function showAction($productId)
{
    $product = $this->getDoctrine()
        ->getRepository('AppBundle:Product')
        ->find($productId);
 
    if (!$product) {
        throw $this->createNotFoundException(
            'No product found for id '.$productId
        );
    }

}

当要查询某个特定类型的对象时,总要使用respository,可以理解respository是一个php类,它唯一的工作就是帮助我们从特定类中取出entity。如上图所示。appBundle:Product 是快捷写法,我们可以在Doctrine里随处使用,以替代entity类的FQCN类名(如 AppBundle\Entity\Product )。只要我们的entity存放在bundle的 Entity 命名空间下,它就会工作。

$repository = $this->getDoctrine()->getRepository('AppBundle:Product');
 
// query for a single product by its primary key (usually "id")
// 通过主键(通常是id)查询一件产品
$product = $repository->find($productId);
 
// dynamic method names to find a single product based on a column value
// 动态方法名称,基于字段的值来找到一件产品
$product = $repository->findOneById($productId);
$product = $repository->findOneByName('Keyboard');
 
// dynamic method names to find a group of products based on a column value
// 动态方法名称,基于字段值来找出一组产品
$products = $repository->findByPrice(19.99);
 
// find *all* products / 查出 *全部* 产品
$products = $repository->findAll();

使用DQL对象查询

$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
    'SELECT p
    FROM AppBundle:Product p
    WHERE p.price > :price
    ORDER BY p.price ASC'
)->setParameter('price', 19.99);
 
$products = $query->getResult();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值