Symfony 入门

Fundamentals   
     基本点
profiler
    分析器


第一部分,了解symfony的基本点


框架存在的主要目的是避免用户数据库操作,html操作等和逻辑代码混淆。

其中dd是url中的变量

app_dev.php 是个前端控制器,对于所有的请求都有一个独一无二的入口程序。

/demo/hello/Fabien 是可视化的路径。是暴露给用户的url

作为一个开发者要做的工作是就是要映射url到资源上。

路由


symfony的路由由配置决定,例如样例的路由在app/config/routing_dev.yml 设置。

   
   
# 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%"

总结






















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值