返回首页 - Notes - 2015

Symfony2 学习笔记


命令行部分


路由部分

app/config/routing.yml 可以指定加载路由的方式和路径,可以有两种不同的方式

一种是加载 Yaml 文件,方法为:

  1. app/config/routing.yml 为:
    ruchee_blog:
        resource: "@RucheeBlogBundle/Resources/config/routing.yml"
        prefix:   /
    
  2. src/Ruchee/BlogBundle/Resources/config/routing.yml 文件为:
    ruchee_blogbundle_home:
        path: /
        defaults: { _controller: RucheeBlogBundle:Page:index }
        requirements:
            _method: GET
    
    
    ruchee_blogbundle_about:
        pattern: /about
        defaults: { _controller: RucheeBlogBundle:Page:about }
        requirements:
            _method: GET
    

另一种是使用注解,在控制器里面指定路由:

  1. app/config/routing.yml 为:
    ruchee_blog:
        resource: "@RucheeBlogBundle/Controller"
        type: annotation
        prefix:   /
    
  2. src/Ruchee/BlogBundle/Controller/PageController.php 文件为:
    <?php namespace Ruchee\BlogBundle\Controller;
    
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
    
    class PageController extends Controller {
    
        /**
         * 首页
         * @Route("/", name="ruchee_blogbundle_home")
         * @Template()
         */
        public function indexAction () {
            return ['title' => '首页', 'content' => '首页内容'];
        }
    
    
        /**
         * 关于
         * @Route("/about", name="ruchee_blogbundle_about")
         * @Template()
         */
        public function aboutAction () {
            return ['title' => '关于', 'content' => '关于内容'];
        }
    
    }
    
  3. 需要注意的是,注解部分的 @Route() 中,参数必须使用双引号,写成 @Route('/', name='ruchee_blogbundle_home') 解析不了

控制器部分

渲染模版既可以手动指定模版路径,也可以用注解方式的方式使用默认模版路径,默认路径是 Bundle名/控制器名/方法名.html.twig

<?php namespace Ruchee\BlogBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

// 如果需要使用注解路由和注解模版,必须引入这两个类
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

class PageController extends Controller {

    /**
     * 注解方式,使用默认模版路径
     * @Template()
     */
    public function indexAction () {
        return ['title' => '首页', 'content' => '首页内容'];
    }

    /**
     * 手动指定模版路径
     */
    public function aboutAction () {
        $data = [
            'title'   => '关于',
            'content' => '关于内容'
        ];

        return $this->render('RucheeBlogBundle:Page:about.html.twig', $data);
    }

}

获取当前请求的访问方式:

<?php

$request = $this->get('request');
if ($request->getMethod() == 'POST') {
    // xxx
}

模版部分


date:2015-04-25、2015-05-23、2015-05-29