我在symfony2(doctrine)中使用以下代码作为我的多对多关系
实体:
/**
* @ORM\ManyToMany(targetEntity="BizTV\ContainerManagementBundle\Entity\Container", inversedBy="videosToSync")
* @ORM\JoinTable(name="syncSchema")
*/
private $syncSchema;
public function __construct()
{
$this->syncSchema = new \Doctrine\Common\Collections\ArrayCollection();
}
public function addSyncSchema(\BizTV\ContainerManagementBundle\Entity\Container $syncSchema)
{
$this->syncSchema[] = $syncSchema;
}
Run Code Online (Sandbox Code Playgroud)
控制器:
$entity->addSyncSchema($container);
$em->flush();
Run Code Online (Sandbox Code Playgroud)
现在,我该如何使用它来删除关系?我是否需要向我的实体添加方法,如removeSyncSchema()?那会是什么样的?
我想知道这段代码是否会在客户端上加载,因为超时时间太长了?
//and update this again in a bit
setTimeout(function() {
updateWeather(lat,lng);
}, 60000);
Run Code Online (Sandbox Code Playgroud) 我在正常的symfony2控制器中有这个代码:
$temp = $this->render('BizTVArchiveBundle:ContentTemplate:'.$content[$i]['template'].'/view.html.twig', array(
'c'=> $content[$i],
'ordernumber' => 1,
));
Run Code Online (Sandbox Code Playgroud)
它工作正常.
现在我试图将其移动到服务,但我不知道如何访问相当于普通控制器的$ this.
我尝试像这样注入容器:
$systemContainer = $this->container;
$temp = $systemContainer->render('BizTVArchiveBundle:ContentTemplate:'.$content[$i]['template'].'/view.html.twig', array(
'c'=> $content[$i],
'ordernumber' => 1,
));
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我猜这是因为渲染不是真正使用普通控制器的$ this->容器,而只使用$ this部分.
任何人都知道如何从服务中使用$ this-> render()?
我希望能够通过命令行清除缓存(浏览器自己的缓存和可能的脱机缓存清单).
有没有办法在symfony2中使用实体管理器(doctrine)手动指定事务,或者可能是在单个事务中完成我自己在下面做两个事务的自然方式?
// creating screen object...
//Creating user object...
//flush the screen into database in order to get the Id to relate the server (user) to
$em->persist($screen);
$em->flush();
//Get id of just inserted screen and attach that to new server (user)
$tempRecordId = $screen->getId();
$tempEntity = $em->getRepository('BizTVContainerManagementBundle:Container')->find($tempRecordId);
$entity->setScreen($tempEntity);
//Flush the user also into database
$em->persist($entity);
$em->flush();
Run Code Online (Sandbox Code Playgroud)
请参阅我必须刷新我的第一个实体以获取它的ID,所以我可以将我的第二个实体与我的第一个实体相关联......
由于我正在扩展BaseUser,我的用户实体中没有属性$ name,如何向其添加验证,我可以向该实体添加属性$ username吗?是否会混淆或覆盖某些功能或验证或本机提供给用户类的?
我解决了这个问题FOSUserBundle - 验证用户名,密码或电子邮件字段,但因为我使用了一堆对我不起作用的注释验证.
后续问题 - 我在fosUSerBundle XML文件中看到用于验证用户本身是一个使用截取用户名的检查器,我没有得到该功能,如果我尝试添加,我会直接看到SQL错误消息与现有用户同名的用户.这是因为我使用注释会一起覆盖XML验证文件吗?
use BizTV\UserBundle\Validator\Constraints as BizTVAssert;
use Symfony\Component\Security\Core\User\AdvancedUserInterface;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
use BizTV\BackendBundle\Entity\company as company;
class User extends BaseUser implements AdvancedUserInterface
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
//TODO: Add regex on $name for a-z, A-Z, 0-9 and _ (underscore)
//TODO: Add constraint on $name * @BizTVAssert\NameExists (and finish coding this constraint)
/**
* @var object BizTV\BackendBundle\Entity\company
*
* …Run Code Online (Sandbox Code Playgroud) 我正在使用与doctrine相关的文件上传的标准实现,根据symfony2网站教程中的示例.
当我的上传表单在验证中遇到错误,并将用户返回到带有错误消息的表单时,它会丢失选择上传的文件,但如果我var_dump我的$ entity-> file我可以看到它有文件.. .
//if form is valid, do some stuff... if not:
else {
//var_dump($entity->file); //This works, I get my file
//die;
//Get and check the folder chosen as parent
$entity->setFolder( $this->checkFolderId($request->request->get('folder')) ); //will cause die() if folder doesn't belong to this company
$folders = $this->getFolders();
return $this->render('BizTVMediaManagementBundle:Image:new.html.twig', array(
'entity' => $entity,
'form' => $form->createView(),
'folders' => $folders,
'fileExists' => $fileExists,
));
}
Run Code Online (Sandbox Code Playgroud)
在将其放入树枝视图后,文件字段中没有任何内容.
这是我的实体......
<?php
namespace BizTV\MediaManagementBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* …Run Code Online (Sandbox Code Playgroud) 因为我有一个自定义构建的jQuery插件来将文件上传传递给我的symfony2 webapp,我正在寻找在控制器中处理这个上传的方法.
我目前拥有的标准(非ajax)文件上传(并且适用于同步调用)看起来像这样
控制器摘录
...
$entity = new Image();
$request = $this->getRequest();
$form = $this->createForm(new ImageType($createAction), $entity);
$form->bind($request); // <-- Find a way to make this connection manually?!
//check that a file was chosen
$fileExists = isset($entity->file);
if ( ($form->isValid()) && ($fileExists) ) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
}
...
Run Code Online (Sandbox Code Playgroud)
表单类型:表单只接受文件和名称:
class ImageType extends AbstractType
{
...
public function buildForm(FormBuilderInterface $builder, array $options)
{
$createAction = $this->createAction;
if ($createAction) {
$builder
->add('file')
;
}
$builder
->add('name', 'text', array('label' …Run Code Online (Sandbox Code Playgroud) 也许不是一个合适的SO问题,但我会试一试.
当我尝试从远程服务器转储我的数据库时,我的MacOS MySQL工作台告诉我:
Applications/MySQLWorkbench.app/Contents/MacOS/mysqldump是版本5.7.12,但要转储的MySQL服务器版本为5.7.15.由于mysqldump的版本比服务器旧,因此某些功能可能无法正确备份.建议您将本地MySQL客户端程序(包括mysqldump)升级到等于或高于目标服务器的版本.然后必须在首选项 - >管理员 - > mysqldump工具的路径中设置转储工具的路径:
我安装了6.3版,内置的"检查更新"只告诉我我已经有了最新版本.
有谁知道我可以去哪里下载这个更新的转储工具?我在MySQL.com上环顾四周但却找不到它.
我的用户标记为'active',如果设置为零或null,我将不允许登录.
我已经尝试了几种方法并且做得很短.
如果我执行注销路由,则不会保留Flash消息,因此用户什么也看不到.
我考虑在登录表单上添加验证,以便在标志未设置为true时抛出正常的表单错误,但在该文件夹(vendor/Bundles/FOS/UserBundle/Form/Type)中我找不到任何登录信息形式,只有注册等,所以我不知道在哪里放或继承从哪里来覆盖.
我也按照这里的建议尝试手动注销,但这给我留下了死亡的白屏......
有什么建议如何轻松完成这个?
************** UPDATE ************
我意识到我可能想在登录表单上添加验证器.我目前已将其编码到用户被发送到的第一条路线的控制器中,但如果用户在登录前键入路线,则不会提供太多安全性,因为在成功登录尝试后,我的默认"登陆页面"之后登录将不是用户被带到的路线,但他将登陆他选择的路线...
***再次更新****
所以服务配置文件有这个......
<service id="security.user_checker" class="%security.user_checker.class%" public="false" />
Run Code Online (Sandbox Code Playgroud)
这个参数在这里定义......
<parameter key="security.user_checker.class">Symfony\Component\Security\Core\User\UserChecker</parameter>
Run Code Online (Sandbox Code Playgroud)
所以为了修改我需要覆盖的登录逻辑
Symfony\Component\Security\Core\User\UserChecker
Run Code Online (Sandbox Code Playgroud)
现在我通过覆盖symfony app/config中我自己的parameters.ini上面的参数来完成这个
security.user_checker.class = BizTV\UserBundle\Controller\UserChecker
Run Code Online (Sandbox Code Playgroud)
..并将此检查添加到我的userChecker overrider ...
//Test for companylock...
if ( !$user->getCompany()->getActive() ) {
throw new LockedException('The company of this user is locked.', $user);
}
Run Code Online (Sandbox Code Playgroud)
这是整个文件:
<?php
/*
* This file is part of the Symfony package.
* …Run Code Online (Sandbox Code Playgroud)