未理解
下拉列表
链接助手系列
用PDO自定义SQL查询
用户会话
配置设置
参数
sfConfig
跳转
全局验证
文件上传
LOG
未理解 TOP
关于验证的问题
symfony建立的脚手架中的新增和编辑都是使用的
当需要执行验证的时候
{
}
会提示 The template "/updateSuccess.php" does not exist in:
解决办法是
------------------------------------------------
建立一个action
这个时候
如果验证失败
那么问题出在哪里?
现看看symfony
那么当用户输入错误的数据时会发生什么呢?如果并不满足login.yml文件中所写的条件,那么Symfony控制器就会将这个请求传递给 userActions类的handleErrorUnvalidate()方法,而不是form_tag参数中所设计的executeUnvalidate()方法。如果这个方法不存在,默认行为则会显示UnvalidateError.php模板。这是因为默认的handleError()方法返回:
public function handleERROR()
{
}
这是要编写的一个全新的模板。但是我们更希望重新显示登陆表单,并且将错误信息显示在相关的表单域附近。所以我们要修改显示的登陆错误行为,在我们这个例子中,UnvalidateSuccess.php模板为:
public function handleErrorUnvalidate()
{
}
所以
结果就会正确显示
//下拉列表
<?php echo select_tag('payment',
'<option selected="selected">Visa</option>
?>
=> <select name="payment" id="payment">
//可选项列表
<?php echo options_for_select(array('Visa','Eurocard','Mastercard'),0) ?>
=> <option value="0" selected="selected">Visa</option>
//混合了可选项的下拉列表辅助函数
<?php echo select_tag('payment',options_for_select(array(
),0)) ?>
=> <select name="payment" id="payment">
//用关联数组指明选项名称
<?php echo select_tag('name',option_for_select(array(
),'Ian')) ?>
=><select name="name" id="name">
//可复选的下拉列表(选中值可以是一个数组)
<?php echo select_tag('payment',options_for_select(
array('Visa','Mastecard')
),'multiple=multiple') ?>
=><select name="payment" id="payment" multiple="multiple">
| ||
链接助手系列(Link helpers) | | 默认已引入 |
url_for() | 重构URL | url_for( 'URL_raw' ) |
link_to() | 文字链接 | link_to('link_title', 'URL_raw' [, $options] ) |
图像链接 | link_to(image_tag('img'), 'URL_raw' [, $options] ) | |
button_to() | 按钮链接 | button_to('link_title', 'URL_raw' [, $options] ) |
mail_to() | 邮件链接 | mail_to('email_address', 'address title' [, $options]) |
文本助手(Text helpers) | 引入声明:use_helper('Text') | |
truncate_text() | 裁切文本 | truncate_text ($text, $length , $truncate_string = '...') |
excerpt_text() | 选摘文本 | excerpt_text ($text, $sentence, $radius = 100 , $truncate_string = '...') |
highlight_text() | 加亮文本 | highlight_text($text, $sentence [,$highlighter]) |
simple_format_text() | HTML编码文本 | simple_format_text($text) |
auto_link_text() | 智能文本链接 | auto_link_text($text) |
image_tag() | 图像助手 | image_tag('image_file',[, $options] ) |
日期助手(Date helpers) | 引入声明:use_helper('Date') | |
format_date() | 日期格式化 | format_date($date) |
format_datetime() | 日期时间格式化 | format_datetime($datetime) |
format_daterange() | 日期区间格式化 | format_daterange($start_date, $end_date, 'MM/yy', 'from %s to %s', 'starting from %s', until %s') |
distance_of_time_in_words() | 时间区间 | distance_of_time_in_words($from_time, $to_time, $include_seconds = false) |
time_ago_in_words() | 时间过往 | time_ago_in_words($from_time, $include_seconds = false) |
数字助手(Number Helpers) | 引入声明: use_helper('Number') | |
format_number() | 数字格式化 | format_number($the_number) |
format_currency() | 货币格式化 | format_currency($money_number,'CURRENCY_CODE') |
国际化助手(International Helpers) | 引入声明:use_helper('I18N') | |
format_country() | 地区国际化 | format_country('COUNTRY_CODE') |
format_language() | 语言国际化 | format_language('LANGUAGE_CODE') |
表单助手(Form Helpers) | 默认已引入 | |
form_tag() | 表单助手 | form_tag('test/save',[, $options])…</from> |
input_tag() | 文本框 | input_tag('name', 'default_value') |
textarea_tag() | 文本域 | textarea_tag('name', 'default_content', 'size=10x20') |
checkbox_tag() | 复选框 | checkbox_tag('name', 'value', 'true/false') |
radiobutton_tag() | 单选框 | radiobutton_tag('name', 'value', 'true/false') |
input_file_tag() | 文件域 | input_file_tag('name') |
input_password_tag() | 密码框 | input_password_tag('name', 'value') |
input_hidden_tag() | 隐藏域 | input_hidden_tag('name', 'value') |
submit_tag() | 提交按钮 | submit_tag('Save') |
submit_image_tag() | 提交图片按钮 | submit_image_tag('submit_img') |
select_tag() | 单选选取框 | select_tag('select_name', options_for_select(Value_array), 'selected_value')) |
多选选取框 | select_tag('select_name', options_for_select(Value_array), selected_array,'multiple=multiple')) | |
object_input_tag() | 对象文本框 | object_input_tag($object, $method, $options) |
object_textarea_tag() | 对象文本域 | object_textarea_tag($object, $method, $options) |
object_checkbox_tag() | 对象复选框 | object_checkbox_tag($object, $method, $options) |
object_select_tag() | 对象选择框 | object_select_tag($object, $method, $options) |
select_country_tag() | 国家下拉列表 | select_country_tag('country', 'COUNTRY_CODE') |
JavaScript助手(JavaScript helper) | 引入声明:use_helper('Javascript') | |
link_to_function() | Javascript链接 | link_to_function('link_title','function_name('parameter') [,$options]) |
javascript_tag() | Javascript代码 | javascript_tag(" function foobar() {...}") ?> |
AJAX表单助手 | 从属于JavaScript助手 | |
update_element_function() | 更新页面元素 | update_element_function('element_id', $options) |
form_remote_tag() | AJAX表单 | form_remote_tag($options) ?>…</from> |
submit_to_remote() | AJAX表单按钮 | submit_to_remote('ajax_submit', 'Add in AJAX', $options)) |
observe_field() | 表单元素侦查 | observe_field('item', $options) |
periodically_call_remote() | 表单整体侦查 | periodically_call_remote($options) |
symfony1.4 解决登陆fronend后backend也直接登陆问题 TOP
symfony生成后台和前台后,默认的session_name是同名的,所以当前台或后台登陆任一个的时候再打开另一个应用程序状态自然是登陆状态(getAuthenticated为true),只要改变各自的session_name就可以了。
在各自的factories.yml文件中添加:
all:
routing:
view_cache_manager:
storage:
$connection
$query
$statement
$statement->execute();
$resultset
$max
//以下句子为任何地方均可使用
sfContext::getInstance()->getUser()->getAttribute('user_id')
//以下为在模板中使用
(1.2版)$sf_user->getAttribute('user_id')
(1.4版)<?php if ($sf_user->hasflash("notice")){echo $sf_user->getflash("notice"); } ?>
//以下为在action中使用
$this->getUser()->getAttribute('user_id')
$this->getUser()->setAttribute('user_id')
//会话
class myAccountActions extends sfActions
{
}
$this->getUser()->setAttribute('nickname', $nickname);
$tihs->getUser()->getAttribute('nickname', 'AnonymousCoward');
$this->getUser()->hasAttribute('nickname');
$this->getUser()->getAttributeHolder()->remove('nickname');
$this->getUser()->getAttributeHolder()->clear();
//只存在一次的会话
//在显示出下一页后,短暂属性attrib就被删除了.即使在下一页里你没有调用这个属性,它也一样会被从会话里删除.
//action中
$this->setFlash('attrib',$value);
$value = $this->getFlash('attrib');
//模板中
<?php if ($sf_flash->has('attrib')): ?>
<?php endif; ?>
或者:
<?php echo $sf_flash->get('attrib') ?>
设置访问限制,在
app/myapp/modules/mymodule/config/security.yml里
read:
update:
delete:
all:
默认的安全动作在apps/myapp/config/settings.yml里设置
all:
//行为中取得参数
$request->getParameter('name');
//模板中取得参数
<?php
//带默认值的参数
<?php
//在模板中判断一个参数是否存在
<?php if ($sf_params->has('name')): ?>
<?php else: ?>
<?php endif; ?>
//包含所有参数的数组
$request->getParameterHolder()->getAll()
//完整的URI路径
//'http://localhost/myapp_dev.php/mymodule/myaction'
getUri()
//'/mymodule/myaction'
getPathInfo()
//在action中
$hasFoo = $this->getRequest()->hasParameter('foo');
$hasFoo = $this->hasRequestParameter('foo'); //Shorter version
$foo
$foo
参数的名字由几部分组成,中间用下划线分割,顺序如下:
&与配置文件名有关的前缀(sf_代表 settings.yml, app_代表app.yml, mod_ 代表 module.yml, sf_i18n_ 代表 i18n.yml,
&父键名(如果有),小写形式
&键名,小写形式
symfony 1.1.9取得环境的方法: sfConfig::get('sf_environment')
return sfView::NONE;
//避开视图层,但应答有HTTP头
return sfView::HEADER_ONLY;
//如果动作转发给另一个动作:
$this->forward('otherModule','index');
//如果跳转到另一个动作:
$this->redriect('otherModule/index');
$this->redirect('http://www.google.com/');
//错误的跳转处理:
forwardIf();
forwardUnless();
forward404If();
forward404Unless();
redirectIf();
redirectUnless();
symfony 1.1.9 的全局验证:<?php echo $form->renderglobalerrors(); ?>
sfWebRequest对象知道如何处理附件
调用:
类:
abstract class Tool{
url_for()在Symfony项目中,是用得比较多的一个函数,其作用就是跟据URL规则(或路由)产生一个URL字符串。
url_for() 有两种用法:
1) function url_for($internal_uri, $absolute = false);
第一种的用法,是使用内部地址(或路由规则),再加上参数(参数也一起跟在$internal_uri),产生URL字符串。$absolute为True时产生绝对路径,为False时产生相对路径,默认为False;
示例:
url_for(My_Module/My_Action);
url_for(My_Module/My_Action?id=1);
url_for(My_Module/My_Action?id=1,true);
url_for(@My_Module_Rount_Name?id=1&pageid=2);
url_for(@My_Module_Rount_Name?id=1&pageid=2&show=3,true);
2) function url_for($routeName, $params = array(), $absolute = false);
第二种的用法,是直接使用路由规则,再加上参数,产生URL字符串。$absolute为True时产生绝对路径,为False时产生相对路径,默认为False;
示例:
url_for(My_Module_Rount_Name);
url_for(My_Module_Rount_Name, array(id=>1, pageid=>2));
url_for(My_Module_Rount_Name, array(id=>1, pageid=>2, show=>3), true);
需要注意的是,第二种方式的写法的第一个参数Rount_Name,不能象第一种写法那样在前面加个@符号
TOP