Symfony 数据库

当你设置了连接数据库的信息,但是你的数据库还有创建,可以使用如下信息创建

$php app/console doctrine:database:create

#删除数据库
$php app/console doctrine:database:drop --force

#数据库升级
$php app/console doctrine:schema:update --force

创建Entity
为Picture 创建一个entity,存在三个字段. 但是这样他不会创建数据表. 你需要使用到上面的。数据升级后你的字段就会创建成功
创建字段时三种基本类型
1: integer 数字
2: text 文本
3: string 普通字符串 varchar

$php app/console doctrine:generate:entity --entity="AcmePictureBundle:Picture" --fields="title:string(255) create_date:integer(12) content:text"

根据table来生成entity

$ php app/console doctrine:mapping:import AcmeBlogBundle annotation
$ php app/console doctrine:generate:entities AcmeBlogBundle

添加数据
先载入自己添加的entity

use Acme\PictureBundle\Entity\Picture;
//设置对象
$pic = new Picture();
$pic->setTitle('A Foo Bar');
$pic->setPath('');
$pic->setContent('Lorem ipsum dolor');
$pic->setCreateDate(time());

//添加数据
$em = $this->getDoctrine()->getManager();
$em->persist($pic);
$em->flush();

查询

//获取对象
$pic_obj = $this->getDoctrine()
      ->getRepository('AcmePictureBundle:Picture');

//根据ID来获取数据
$pic_obj->find(1);

//只获取一条。根据title来查询
$pic_obj->findOneBy(array('title'=>'Hello'));

//查询所有title等于hello的数据
$pic_obj->findBy(array('title'=>'Hello'));

//获取所有的数据
$pic_obj->findAll();

更新数据

$em = $this->getDoctrine()->getManager();
//先查询数据
$pic = $em->getRepository('AcmePictureBundle:Picture')->find(8);

//重新设置title
$pic->setTitle('New product name!');

//执行更新
$em->flush();

删除数据

$em = $this->getDoctrine()->getManager();
//先查询数据
$pic = $em->getRepository('AcmePictureBundle:Picture')->find(8);
$em->remove($pic);
$em->flush();

Symfony 常用技巧

1. URL跳转

URL跳转, 首先redirect是在基类控制器中,如果要使用必须继承基类(控制器)

$this->generateUrl('homepage');  //这只是生成一个url

return $this->redirect($this->generateUrl('homepage')); //普通跳转

return $this->redirect($this->generateUrl('homepage'), 301); //进行301跳转

//你也可以直接使用:
return new RedirectResponse($this->generateUrl('homepage'));

2. 服务

//使用$this->get('server_name') 获取服务名
$templating = $this->get('templating');
$router = $this->get('router');
$mailer = $this->get('mailer');

//列出所有服务
$php app/console container:debug

3. 创建404页面

//404只需要抛出异常就可以了
//createNotFoundException 函数
if($name === FALSE) {
throw $this->createNotFoundException('The product does not exist');
}

3. Session
http://symfony.com/doc/current/book/controller.html#managing-the-session

//获取session类
$session = $this->getRequest()->getSession();

//设置一个session
$session->set('foo', 'bar');

//获取一个session
$foo = $session->get('foo');

//获取一个session,如果不存在的话使用一个空数组的默认值
$filters = $session->get('filters', array());

4. 信息提示
http://symfony.com/doc/current/book/controller.html#flash-messages

//设置一个信息提示
$this->get('session')->getFlashBag()->add('success', 'Your changes were saved!');

//在程序中可以使用如下来获取信息
$this->get('session')->getFlash('success');

//然后在模板中获取出来, Tag 和 add时的 tag要对应
{% for flashMessage in app.session.flashbag.get('success') %}
    
{{ flashMessage }}
{% endfor %}

5. 输出对象, 输出json

$response = new Response(json_encode(array('name' => $name)));

//设置json头
$response->headers->set('Content-Type', 'application/json');

6. 请求对象

$request = $this->getRequest();

$request->isXmlHttpRequest(); //判断是否是ajax请求
$request->getPreferredLanguage(array('en', 'fr'));
$request->query->get('page');   //获取一个get数据
$request->request->get('page'); //获取一个post数据

Symfony 安装与基本使用

http://symfony.com/doc/current/book/installation.html

中文教程, 由于中文教程的版本是1.x 所以不推荐看中文教程:
http://symfony.com/legacy/doc/jobeet/1_2/zh_CN/01?orm=Propel#

首先编辑PHP.ini,开启 phar扩展

extension=phar.so

安装Composer, 一个强大的php包安装系统

$curl -s https://getcomposer.org/installer | php

运行安装,将最新版本的 symfony 安装到 sf目录

$php composer.phar create-project symfony/framework-standard-edition sf

创建一个控制器为Hello:

$php app/console generate:bundle --namespace=Acme/ArticleBundle --format=yml

清空缓存

$php app/console cache:clear --env=prod --no-debug