Fundamentals
基本点
profiler
分析器
分析器
第一部分,了解symfony的基本点
框架存在的主要目的是避免用户数据库操作,html操作等和逻辑代码混淆。
其中dd是url中的变量
app_dev.php 是个前端控制器,对于所有的请求都有一个独一无二的入口程序。
/demo/hello/Fabien 是可视化的路径。是暴露给用户的url
作为一个开发者要做的工作是就是要映射url到资源上。
路由
# src/Acme/DemoBundle/Resources/config/routing.yml
_welcome:
path: /
defaults: { _controller: AcmeDemoBundle: Welcome: index }
这里定义了当用户访问"/"的时候触发
AcmeDemoBundle:Welcome:index这个控制器。
除了把路由定义在yaml文件之外还可以定义在xml或者php文件中。
Controllers
PHP 控制器实际上就是接收request和发送Response的php方法。
symfony选择控制器是在配置文件里基于_controller的,比如demo中的AcmeDemoBundle:Welcome:index
这个逻辑地址实际上指向Acme\DemoBundle\WelcomeContrller.php::indexAction
// src/Acme/DemoBundle/Controller/WelcomeController.php
namespace Acme\DemoBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class WelcomeController extends Controller
{
public function indexAction()
{
return $this->render('AcmeDemoBundle:Welcome:index.html.twig' );
}
}
这里要注意的是指定_controller的值时必须写到method。
WelcomeController 继承了 Controller 。这个控制器定义了很多快捷方法,比如render() ,这个方法返回一个Response对象,其中indexAction可以改写成如下:
public function indexAction()
{
$response = $this->render('AcmeDemoBundle:Welcome:index.txt.twig' );
$response->headers->set('Content-Type' , 'text/plain' );
return $response;
}
名为 AcmeDemoBundle:Welcome:index.html.twig的template 指向实际文件是
Resources/views/Welcome/index.html.twig
接下来继续找路由的配置,找到_demo为key的地方。
src\Acme\DemoBundle\Resources\config\routing.yml
_demo:
resource: "@AcmeDemoBundle/Controller/DemoController.php"
type: annotation
prefix: /demo
指向资源:
src/Acme/DemoBundle/Controller/DemoController.php
/**
* @Route("/hello/{name}", name="_demo_hello")
* @Template()
*/
public function helloAction($name)
{
return array('name' => $name);
}
注意注释中的@Route 并不能去掉,它生成了一个路由/hello/{name} 匹配到了 helloAction (靠注释里做路由也还是第一次看到。。。
@Template() 是告诉symfony要渲染模版。模版的名字应该是和控制器的名字对应的。例如样例中的:
AcmeDemoBundle:Demo:hello.html.twig
位于 :
src/Acme/DemoBundle/Resources/views/Demo/hello.html.twig
Templates
{% extends "AcmeDemoBundle::layout.html.twig" %}
{% block title "Hello " ~ name %}
{% block content %}
<h1>Hello {{ name }}!</h1>
{% endblock %}
{% set code = code(_self) %}
symfony默认使用twig 作为前端模版。当然也可以使用传统的php模版
Bundles
bundle就是一系列php文件,图片,脚本等组合的结构集。方便分享和使用。
Working with Environments
如上图是Symfony Debug Toolbar
默认在prod的模式中开发者工具是不起作用的。
prod = production
$kernel = new AppKernel('dev', true);
也可以在app下的config配置
imports:
- { resource: config.yml }
framework:
router:
resource: "%kernel.root_dir%/config/routing_dev.yml"
strict_requirements: true
profiler: { only_exceptions: false }
web_profiler:
toolbar: "%debug_toolbar%"
intercept_redirects: "%debug_redirects%"
总结