我有一个我建立的数据库.数据库中的每个表都是InnoDb.有几个表有外键约束,我设置它们On Delete = Cascade.当我使用早期版本的phpmyadmin时,使用这些很简单:我只是转到表的Structure选项卡,单击Relation View链接,只要我在正确的列上设置了正确的索引,我可以设置我认为合适的外键.
升级到版本4后,它变成了一场噩梦.对于某些表,我转到关系视图,一切都很好.但对于其他人 - 即使他们已经设置了外键约束 - 我也看不到任何与他们合作的选择.
更糟糕的是,我甚至尝试删除索引并重新添加它们,只是给出了以下错误:Cannot drop index [index_name]: needed in a foreign key constraint.所以除非我弄错了,约束就在那里,但phpmyadmin拒绝向我显示.
有什么我必须做的让它们再次出现吗?至少可以说这是非常令人沮丧的:现在之前工作正常的东西并不能归功于升级.
我发现这个非常酷的Bootstrap 插件可以测量密码强度.它看起来很好,我想使用它,但我无法弄清楚如何使它工作.根据Github页面,你要做的就是"只需要在你想要附加强度计的密码字段上调用插件.".不幸的是,他们没有告诉你把文件放在哪里,也不告诉你实际需要使用哪些javascript文件.
我一直在谷歌搜索为Bootstrap添加或安装插件的每种可能的迭代方法,并且每次都是空的.有人在这里有答案吗?
我有一个使用Doctrine 2的Zend Framework应用程序(版本1.11).我已经设置了PHPUnit来对我的模型和表单以及诸如此类的东西进行测试.测试工作得很好,但有一个问题:一旦完成测试数据就会将测试数据留在数据库中.这是我的一个测试的基本样本:
class VisaTypeEntityTest extends ModelTestCase
{
public function testCanSaveAndRetrieveVisaType()
{
$addVisaType = new \Entities\VisaTypes();
$addVisaType->setEnglishName('Test Visa Type')
->setJapaneseName('??')
->setKanaName('???')
->setDescription('Description of the test visa type');
$this->em->persist($addVisaType);
$this->em->flush();
$getVisaType = $this->em->getRepository('\Entities\VisaTypes')
->findOneByEnglishName('Test Visa Type');
$this->assertEquals('Test Visa Type', $getVisaType->getEnglishName());
}
}
Run Code Online (Sandbox Code Playgroud)
显然,数据必须实际输入数据库,以确保一切都是犹太人.但是我不希望每次运行测试时所有的测试数据都会使数据库变成数据库,我也不想手动删除它.
有什么我可以做的,比如使用tearDown()方法在测试完成后摆脱测试数据?如果是这样,是否可以将表的id字段中的自动增量"回滚"到它们之前的状态?我知道如果ids之间存在间隙真的无关紧要,但是如果有某种方法可以让Doctrine重置自动增量值,这将是很好的.
我一直在谷歌搜索无济于事.我的一个表单中有一个多复选框表单元素.这是我用来创建它的代码:
$this->add(array (
'name' => 'thingyId',
'type' => 'MultiCheckbox',
'options' => array (
'value_options' => $thingyArray,
)
));
Run Code Online (Sandbox Code Playgroud)
在我的视图脚本中,我有这个:
<?= $this->formRow($form->get('thingyId')); ?>
Run Code Online (Sandbox Code Playgroud)
表单元素显示正常,但所有复选框都在一行上.如何获取它以使每个复选框都在新行上?
我在Ubuntu 11.10下遇到了Zend Framework的一个奇怪问题.我正在使用笔记本电脑作为我的编程环境来测试一些东西,然后再将它们上传到我的主服务器.我下载并安装了Zend Framework并创建了一个新项目.去localhost.project时,一切正常.
问题是当我然后尝试设置虚拟服务器以便我可以去project.localhost并以相同的方式查看它(我知道能够这样做并不重要,但无论如何我想要).我通过转到/ etc/apache2/sites-available并在那里创建一个新的虚拟主机来设置虚拟主机.如果我将documentRoot设置为/ var/www/project/public,我会收到内部服务器错误.更奇怪的是,如果我将它设置为/ var/www/project,我可以看到所有目录 - 应用程序,文档,库,测试 - 但不公开.我不知道为什么会这样.
我正在使用全新安装的Ubuntu 11.10,我使用tasksel来安装LAMP服务器.这应该工作 - 它与我的VPS工作正常 - 但事实并非如此.
编辑:这是虚拟主机的文件:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName project.localhost
DocumentRoot /home/moi/web_docs/project/public
<Directory />
Options All
AllowOverride All
</Directory>
<Directory /home/moi/web_docs/project/public>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg. …Run Code Online (Sandbox Code Playgroud) 我正在用PHP编写一个应用程序,用户可以输入两组信息,并打印出两组的各种可能组合.目标是通过练习不同的问答模式,将其用作学习语言的教学工具.
例如,我们可以练习"你有没有试过......?"的问题.加上四项活动中的一项,如蹦极,帆船,跳伞和水肺潜水.还有四种可能的答案:
用户将输入两组数据,然后应用程序将打印包含问题和答案的所有可能组合的卡片.例如,卡1看起来像这样:
然后下一张卡片可能如下所示:
如您所见,有许多不同的可能组合.我们的想法是两个列表的长度相同,以便打印出所有可能性.同样重要的是,在任何卡上不得多次使用任何问题或答案,并且两张卡可以相同.最好的方法是什么?实际的输入和输出不是问题 - 我以前做过类似的事情.我只需要算法来生成组合.
编辑:我想我真正想要的是保持每张卡的活动顺序相同,但要有各种可能的答案组合.所以我真正需要的是能够生成以下索引集,以便从answers数组中获取数据.所以我真的想要更像这样的东西:
...等等,直到产生所有可能的组合.
我正在使用Doctrine 2构建一个ZF2应用程序,并尝试使用模拟对象进行测试.我试图测试的原始动作如下:
public function indexAction()
{
$title = 'File Types';
$this->layout()->title = $title;
$em = $this->serviceLocator->get('entity_manager');
$fileTypes = $em->getRepository('Resource\Entity\FileType')
->findBy(array(), array('type' => 'ASC'));
return array(
'title' => $title,
'fileTypes' => $fileTypes
);
}
Run Code Online (Sandbox Code Playgroud)
在我的测试中,我使用以下方法来创建实体管理器和FileTypes实体存储库的模拟:
public function mockFiletypeResult($output)
{
$emMock = $this->getMockBuilder('Doctrine\ORM\EntityManager')
->disableOriginalConstructor()
->getMock();
$repositoryMock = $this->getMock('Resource\Entity\FileType');
$repositoryMock->expects($this->any())
->method('findBy')
->will($this->returnValue($output));
$emMock->expects($this->any())
->method('getRepository')
->will($this->returnValue($repositoryMock));
$this->getApplicationServiceLocator()->setAllowOverride(true);
$this->getApplicationServiceLocator()->setService('Resource\Entity\FileType', $repositoryMock);
$this->getApplicationServiceLocator()->setService('Doctrine\ORM\EntityManager', $emMock);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码基于我在stackoverflow上的这篇文章中读到的内容.
问题是,当我运行测试时,我收到以下错误:Fatal error: Call to undefined method Mock_FileType_39345bde::findBy() in /path/to/test.我究竟做错了什么?我环顾四周但似乎无法弄清楚问题.
编辑:我原来写的错误消息是抱怨未识别的findAll()方法,当它实际上是findBy().
编辑2:我已经尝试在我的实体存储库中添加一个新方法,如下所示:
public function getFileTypes()
{ …Run Code Online (Sandbox Code Playgroud) php ×3
doctrine-orm ×2
algorithm ×1
apache2 ×1
combinations ×1
database ×1
doctrine ×1
foreign-keys ×1
javascript ×1
jquery ×1
mysql ×1
phpmyadmin ×1
phpunit ×1
plugins ×1
ubuntu ×1
unit-testing ×1
zend-form ×1