任何人都可以请告诉我如何为我的架构添加一个类型枚举的新列以实现Doctrine Migration?
在Symfony中启用CSRF保护的情况下,为测试表单创建功能测试的最佳方法是什么?
目前,我必须在每个表单提交之前添加以下代码:
$form = new sfGuardFormSignin();
$token = $form->getCSRFToken();
$token_name = $form->getCSRFFieldName();
Run Code Online (Sandbox Code Playgroud)
然后我添加$ token和$ token_name来形成如下参数:
call('/login', 'POST', array (
'signin' =>
array (
'username' => $username,
'password' => $password,
$token_name => $token,
)))
Run Code Online (Sandbox Code Playgroud)
文档中建议的选项:
'_with_csrf' => true,
Run Code Online (Sandbox Code Playgroud)
根本不起作用.
是否有更简单的方法可以避免为每个手动测试表单添加令牌?或者有没有办法在运行测试时关闭csrf检查?
当你必须测试1-2个表单时,我上面描述的方式是可以的,但如果项目包含数十个独特的表单,则会变得很痛苦.
想知道是否有一个易于将结构化文件转换为Doctrine/Symfony的YAML数据夹具.
我没有看到Doctrine接受CSV的任何实用程序.
我可能只是开始写一些简单的事情来做这件事.值得吗?
我正在研究symfony教程的jobeet,我有问题通过doctrine获得MySQL数据库的数据库连接.开发环境:Mac OS X和XAMPP.
命令php symfony doctrine:build-schema给我以下错误消息:
警告:PDO :: __ construct():[2002]在/ Users/xx/projects/myproject/lib/vendor/symfony中没有这样的文件或目录(尝试通过unix:///var/mysql/mysql.sock连接)第470行上的/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Connection.php
PDO连接错误:SQLSTATE [HY000] [2002]没有这样的文件或目录
database.yml中的数据库设置:
all:
doctrine:
class: sfDoctrineDatabase
param:
dsn: 'mysql:host=localhost;dbname=my_project_db'
username: root
password: root
Run Code Online (Sandbox Code Playgroud)
MySQl正在运行.用户名和密码是正确的.数据库'my_project_db'存在.
有人能给我一个暗示会出错的事吗?
我正在使用symfony 1.4和Doctrine.
我正试图找到一种方法来启用调试模式,只有当前sfUser有一个特殊的debugger凭证.
我已经创建了一个过滤器,如果sfUser没有此凭据(在我的文件中web_debug设置为),则停用symfony调试栏:truesettings.yml
class checkWebDebugFilter extends sfFilter
{
public function execute($filterChain)
{
if(!$this->getContext()->getUser()->hasCredential('debugger'))
{
sfConfig::set('sf_web_debug', false);
}
$filterChain->execute();
}
}
Run Code Online (Sandbox Code Playgroud)
我的index.php文件的代码是:
require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php');
$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false));
sfContext::createInstance($configuration)->dispatch();
Run Code Online (Sandbox Code Playgroud)
问题是,由于debug模式false在我的硬编码中index.php,它也被调试器禁用; 因此,Web调试栏不显示Doctrine语句或时序指示.
有没有办法只在当前sfUser具有精确凭证的情况下启用调试模式?
我试图添加sfConfig::set('sf_debug', true);到我的checkWebDebugFilter::execute()方法,但由于过滤器在 Doctrine语句之后执行,因此不会记录它们.
我还尝试添加session_start();我的index.php文件,然后浏览$_SESSION变量以检查当前用户是否具有debugger凭证,但它不起作用(并且它也不符合symfony的精神).
提前感谢您的回答.
如何从Aptana Studio 3终端视图连接到远程主机,并使用该服务器上的命令?
我正在使用symfony框架,该项目在我的主机192.168.0.100中,所以我想运行symfony命令,如: $ symfony propel:build-schema
我们将从自制框架切换到Symfony或Yii.从我们的观点来看,这两个框架的能力是相似的(即它们都有我们需要的东西).
我们的情况:php 5.2.9,中型网站(10.000唯一身份/天)但共享主机.
请不要回答"这个更好",最好是最近会使用这两个框架的人.
我有一个动作,它接受sfGuard保护的POST数据.这意味着如果用户未登录,POST数据将被发送到登录表单.通常,这不是问题,用户继续登录,并且必须再次提交数据.
不幸的是,登录表单似乎使用POST数据,就好像它是与表单本身一起提交的.这意味着它抱怨所需的用户名和密码字段丢失,并且它抱怨它缺少CSRF令牌.无论如何,在提交表单后,最后一个问题不会消失,这意味着用户无法登录.
如果没有登录,则不应向用户显示表单,但用户可能可以在表单仍然打开的情况下注销.所以我要求保持界面的防水和无错误.
这是sfGuard的缺点,可以避免,还是我做错了?
澄清一下,路线如下:
add_subgroup:
url: /group/:id/add
class: sfPropelRoute
options:
model: Group
type: object
param: { module: subgroups, action: create }
requirements:
group_id: \d+
sf_method: [post]
Run Code Online (Sandbox Code Playgroud)
用于提交请求的表单如下:
<form action="<?php echo url_for('add_subgroup', $group) ?>" method="post">
<input type="hidden" name="group_id" value="<?php echo $group->getId() ?>" />
<input type="text" name="subgroup_id" />
<input type="submit" class="button" value="Add" />
</form>
Run Code Online (Sandbox Code Playgroud) 我想通过使某些类可观察来促进我的PHP代码中的松散耦合.Symfony的EventDispatcher组件看起来很有前途,SPL SplObserver/SplSubject对也是如此.
最好的方法是什么?我可以看到几种不同的可能性:
(1)将EventDispatcher实例注入每个可观察类(跟踪全局EventDispatcher实例):
class Foo
{
public function __construct($dispatcher)
{
$this->dispatcher = $dispatcher;
}
public function bar()
{
$this->dispatcher->dispatch(...);
}
}
Run Code Online (Sandbox Code Playgroud)
(2)让observable类扩展EventDispatcher类:
class Foo extends EventDispatcher
{
public function bar()
{
$this->dispatch(...);
}
}
Run Code Online (Sandbox Code Playgroud)
(3)使用SplObserver/SplSubject - 直截了当,但不如EventDispatcher组件灵活
我在我的学说mongodb*odm*中对结果文档进行查询.文档中有两个索引字段,我想在排序中使用.我写了类似的东西:
$results = $this->createQueryBuilder('Document\Score')
->sort('finalScore', 'desc')
->sort('date', 'desc')
->getQuery()
->execute();
Run Code Online (Sandbox Code Playgroud)
这里第二个sort()函数会覆盖第一个函数,并且永远不会找到指定的结果.
在此先感谢您的帮助.