symfony06:运行symfony
来源:互联网 发布:淘宝卖家怎么寄快递 编辑:程序博客网 时间:2024/06/16 09:52
建立一个应用
就像前面提到的,应用必须包含在项目中,因此建立应用要先创建一个项目
Mkdir myproject
Cd myproject
Symfony init-project myproject
接下来创建一个应用
Symfony init-app myapp 或者 symfony app myapp
配置WEB服务器,创建一个虚拟主机站点
<VirtualHost *:80>
ServerName myapp.example.com
DocumentRoot "/home/steve/myproject/web"
DirectoryIndex index.php
Alias /sf /$sf_symfony_data_dir/web/sf
<Directory "/$sf_symfony_data_dir/web/sf">
AllowOverride All
Allow from All
</Directory>
<Directory "/home/steve/myproject/web">
AllowOverride All
Allow from All
</Directory>
</VirtualHost>
$sf_symfony_data_dir
是symfony的数据目录,通过pear config-show查看
重启Apache服务器,然后通过http://localhost/myapp_dev.php/测试,应该没有问题(有问题基本就是APACHE虚拟站点的问题)。
TIPS:关于域名,Linux系统可以修改/etc/hosts文件随意的添加,只限本地测试使用。
页面创建基础
创建模块骨架
cd myproject
symfony init-module myap mymodule
通过http://localhost/myapp_dev.php/mymodule/index查看结果
添加一个页面
Symfony中,页面逻辑放在动作(action)中,表现(表示)放在模板中,一个没有逻辑的页面仍然需要一个空的动作。
添加一个动作
在文件myproject/apps/myapp/modules/mymodule/actions/actions.class.php中添加execute方法
<?php
class mymoduleActions extends sfActions
{
public function executeMyAction()
{
}
}
添加一个模板
在myproject/apps/myapp/modules/templates/下创建模板myActionSuccess.php
<p>Hello, world!</p>
通过http://localhost/myapp_dev.php/mymodule/myAction测试结果
从动作中传送信息到模板
修改动作如下:
<?php
class mymoduleActions extends sfActions
{
public function executeMyAction()
{
$today = getdate();
$this->hour = $today['hours'];
}
}
修改模板如下:
<p>Hello, world!</p>
<?php if ($hour >= 18): ?>
<p>Or should I say good evening? It's already <?php echo $hour ?>.</p>
<?php endif; ?>
从用户表单收集信息
包含普通HTML代码的模板
<p>Hello, world!</p>
<?php if ($hour >= 18): ?>
<p>Or should I say good evening? It's already <?php echo $hour ?>.</p>
<?php endif; ?>
<form method="post" target="/myapp_dev.php/mymodule/anotherAction">
<label for="name">What is your name?</label>
<input type="text" name="name" id="name" value="" />
<input type="submit" value="Ok" />
</form>
一个Helper就是一个symfony定义的PHP函数,被用在模板页中。Helper自动输出一些要比你亲自写代码快的多的HTML代码,使用symfony的Helpers,你可以得到和上面一样的代码:
<p>Hello, world!</p>
<?php if ($hour >= 18): ?>
<p>Or should I say good evening? It's already <?php echo $hour ?>.</p>
<?php endif; ?>
<?php echo form_tag('mymodule/anotherAction') ?>
<?php echo label_for('name', 'What is your name?') ?>
<?php echo input_tag('name') ?>
<?php echo submit_tag('Ok') ?>
</form>
你可能认为,使用Helper并不必写HTML代码方便多少,请看下面:
<?php
> $card_list = array(
> 'VISA' => 'Visa',
> 'MAST' => 'MasterCard',
> 'AMEX' => 'American Express',
> 'DISC' => 'Discover');
> echo select_tag('cc_type', options_for_select($card_list, 'AMEX'));
> ?>
输出的结果:
<select name="cc_type" id="cc_type">
<option value="VISA">Visa</option>
<option value="MAST">MasterCard</option>
<option value="AMEX" selected="selected">American Express</option>
<option value="DISC">Discover</option>
</select>
到其他动作(Action)
看下面的代码
<a href="/myapp_dev.php/mymodule/anotherAction?name=anonymous">
普通HTML格式链接
</a>
上面的链接方式在URL重写后将会出现问题,因此需要采取link_to()helper来创建链接:
<?php echo link_to('linkd_to链接方式','mymodule/anotherAction?name=anonymous') ?>
这样,当你调整URL重写规则后,link_to()将自动转换生成的HTML代码到正确格式。
多数的helpers接受可选的参数
// Option argument as an associative array
<?php echo link_to('I never say my name', 'mymodule/anotherAction?name=anonymous',
array(
'class' => 'special_link',
'confirm' => 'Are you sure?',
'absolute' => true
)) ?>
// Option argument as a string
<?php echo link_to('I never say my name', 'mymodule/anotherAction?name=anonymous',
'class=special_link confirm=Are you sure? absolute=true') ?>
获取信息(从Request)
从请求中获取信息使用sfActions的getRequestParameter()方法,例如:
<?php
class mymoduleActions extends sfActions
{
...
public function executeAnotherAction()
{
$this->name = $this->getRequestParameter('name');
}
}
对于简单数据,你不需要在动作中获取参数,模板能通过调用$sf_params对象的get()方法直接访问参数,就像动作中的getRequestParameter()方法一样
<p>Hello, <?php echo $sf_params->get('name') ?>!</p> //在模板中使用
为什么不使用$_POST,$_GET或者$_REQUEST变量了呢?因为你的URLs被格式化为不同的形式(就像http://localhost/articles/europe/france/finance.html, 没有 ?也没有 =),因此常规PHP变量将无法使用。并且只有路由系统(Routing System)可以获取到Request参数。同时你希望能够加入过滤器来防止代码注入,那保持请求参数在一个干净的参数仓库将是唯一选择。
$sf_params比普通的getter更强大,如果你只想测试请求参数是否存在,可以使用$sf_params->has()方法来代替测试get()的值是否存在。
在模板中测试请求参数是否存在
<?php if ($sf_params->has('name')): ?>
<p>Hello, <?php echo $sf_params->get('name') ?>!</p>
<?php else: ?>
<p>Hello, John Doe!</p>
<?php endif; ?>
还有更好的方式,呵呵:
<p>Hello, <?php echo $sf_params->get('name', 'John Doe') ?>!</p
- symfony06:运行symfony
- symfony
- symfony
- Symfony
- symfony
- symfony
- symfony
- symfony
- Symfony
- Symfony
- 用Crontab在Linux服务器上运行Symfony自带的脚本
- Symfony简介
- symfony plugins
- Symfony 介绍
- 安装symfony
- symfony概述
- SYMFONY 命令
- symfony 学习
- ArrayList的使用
- jsp/servlet 完成文件上传
- avgemc.exe
- ArrayList用法 (经典)
- asp.net中对文件的创建,移动,复制,及删除操作
- symfony06:运行symfony
- avgnt.exe
- avgserv.exe
- Development of Classical and modern control
- 乌矿难死亡69人 设备陈旧可能是事故原因
- 中国将向孟加拉国提供100万美元的紧急援助
- 编剧罢工殃及演员 好莱坞将陷入瘫痪?
- avguard.exe
- symfony07:配置symfony