Symfony2笔记 - 使用Symfony2创建页面
刚学Symfony2,记录下,也当做加深印象吧。
先创建一个Bundle
php app/console generate:bundle --namespace=Test/HiBundle --format=yml
命令一路执行完成之后,
1. 在app/AppKernel.php中会自动加入新创建的Bundle。
2. 在app/config/routing.yml会自动加入新创建的Bundle对应的routing.yml的引用,所以,针对这个Bundle的路由配置应当在这个引用指向的文件中配置。
3. 在src下,会看到新创建的Bundle对应的目录

如果现在在地址栏中输入 http://localhost/proejct_name/web/app_dev.php/hello/world 的话,就会看到 Hello world! 的字样。
这就创建了一个最基础的Bundle了。
默认地,Bundle中routing.yml中生成的内容如下:(我做了些修改,MyTest原本是Default)
test_hi_homepage:
pattern: /hello/{name}
defaults: { _controller: TestHiBundle:MyTest:index }
红色部分: 路由的名称
绿色部分: 匹配URL的模式,如 /hello/world 则会匹配成功,并且world会被传递到控制器中
蓝色部分: 该路由指向的控制器,这里的TestHiBundle明确指定了是哪个Bundle中的控制器会被执行。Test是namespace,HiBundle是Bundle,会执行MyTestController中的index.action
经过路由,到达了控制器中的某个Action,继续上面的例子,到达indexAction,代码如下:
namespace Test\HiBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Response; class MyTestController extends Controller { public function indexAction($name) {// return $this->render('TestHiBundle:Default:index.html.twig', array('name' => $name)); return new Response('<h1>'.$name.'</h1>'); } }
控制器最终会返回一个Response对象,在这里,则会返回一个twig模板(被注释掉),可以在第二个参数的位置传入需要在模板中使用的变量。
Symfony2中使用了PHP5.3中新增加的命名空间(本人对PHP还不是很了解,原本一直是Java阵营的),所以在使用到一些如Response对象的时候,需要引入对应的命名空间才能使程序正常运行。(在这一点上,如果有什么不正确的,请各位指出)
下面,一起看看这个示例中的twig模板,代码如下:
Hello {{ name }} !!
"{{ }}"是twig模板的语法,而name则是从控制器传递过来的变量,这样,页面就会显示Hello xxx !! 。
当然,我们不一定要使用twig模板,我们还是可以使用我们比较熟悉的php模板。
那么,现在来说说
return $this->render('TestHiBundle:MyTest:index.html.twig', array('name' => $name));
首先,如果要使用render(),那么这个控制器就需要继承Symfony2提供的Controller,所以也需要引入Controller。
render()第一个参数是指定需要返回哪个模板,第二个参数是需要在模板中使用的变量。
那么,TestHiBundle:MyTest:index.html.twig指的是什么呢?
同routing.yml一样,TestHiBundle也就确定了具体是哪一个Bundle,然后MyTest指定了模板所属的控制器,换成文件目录来看的话,那么index.html.twig的具体路径就是src/Test/HiBundle/MyTest/index.html.twig。
对于twig模板,实在是很强悍,而语法,网络上也有很多博主作出了分享了,在这我就不重复了,虽然我也暂时说不出个123来,科科科~
至此,一个最简单的Bundle就创建出来了。
其实我也是看Symfony2提供的文档进行学习的,对于英语水平渣渣的我来说是个不小的挑战啊,加油吧!
第一次写关于这类的博客,大家手下留情啊。
浙公网安备 33010602011771号