我将上传的文件存储在web目录中:
//src/Acme/CocoBundle/Entity/CocoFromTheNorth.php
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
public $path;
protected function getUploadRootDir()
{
return __DIR__.'/../../../../web/'.$this->getUploadDir();
}
protected function getUploadDir()
{
return 'uploads/documents';
}
Run Code Online (Sandbox Code Playgroud)
这是一个好习惯吗?将上传的文件保留在Web目录之外以便用户无法直接访问它们会不会更好?
我是否认为最好的方法是将上传的文件存储在Web根目录之外?那么它最好的地方在哪里?或者我如何配置Web服务器以拒绝访问uploads目录?
我想在Symfony中创建表单时使用条件语句.
我在一般情况下使用选择小部件.如果用户选择" 其他 " 选项,我想显示一个额外的文本框小部件.我想这可以在javascript中完成,但是我怎样才能将来自2个小部件的数据保存到我的实体中的同一个属性中?
到目前为止我有这个:
$builder->add('menu', 'choice', array(
'choices' => array('Option 1' => 'Option 1', 'Other' => 'Other'),
'required' => false,
));
//How to add text box if choice == Other ????
Run Code Online (Sandbox Code Playgroud)
我曾计划使用DataTransfomer,但是在2个小部件上?
Option 1而Option 2似乎给了相似的结果.使用execute statement而不是通常的getResult()方法是否有特别的优势?
public function getEventsByOrganiser(EventInterface $event, $username)
{
$qb = $this->repository->createQueryBuilder('e')
->select(array('e', 'u'))
->leftJoin('e.user', 'u')
->andWhere('u.username = :username');
return $qb->getQuery()->execute(array(
'username' => $username
));
}
Run Code Online (Sandbox Code Playgroud)
public function getEventsByOrganiser(EventInterface $event, $username)
{
$qb = $this->repository->createQueryBuilder('e')
->select(array('e', 'u'))
->leftJoin('e.user', 'u')
->andWhere('u.username = :username')
->setParameter('username', $username);
return $qb->getQuery()->getResult();
}
Run Code Online (Sandbox Code Playgroud) 此代码转储正确$id的类型变量null:
/**
* Show user
*
* @Route("/show/{id}", name="acme_user_show", defaults={"id"=null}, requirements={"id"="\d+"})
*/
public function showUserAction($id = null)
{
var_dump($id);
}
Run Code Online (Sandbox Code Playgroud)
而以下代码给出了一个$id类型的变量string:string(4) "null"
/**
* Show user
*
*/
public function showUserAction($id = null)
{
var_dump($id);
}
Run Code Online (Sandbox Code Playgroud)
routing.xml
<route id="acme_user_show" pattern="/show/{id}">
<default key="_controller">AcmeUserBundle:User:show</default>
<default key="id">null</default>
<requirement key="id">\d+</requirement>
</route>
Run Code Online (Sandbox Code Playgroud)
我会假设2给出类似的结果,这是正常的吗?如何在xml中给出默认的空值?
/showUser路径来测试$id变量是否为null.<default key="id" />而不是<default key="id">null</default>=>没有成功我已成立的upload_max_filesize和post_max_size要在php.ini到32MB.
我正在使用Symfony2.我创建了一个包含文件变量的实体,以便人们可以上传文件:
/**
* @Assert\File(maxSize="3M")
*/
public $file;
Run Code Online (Sandbox Code Playgroud)
致命错误:第177行/Applications/MAMP/htdocs/Symfony/vendor/symfony/src/Symfony/Component/HttpKernel/Profiler/Profiler.php中允许的内存大小为150994944字节(试图分配62353390字节)
当上传的文件高于post_max_size时,有没有办法让验证器工作?Symfony如何处理大于post_max_size的文件上传?
我创建了一个具有Sortable行为的实体,并且有一个关于使用它的问题.
设置和获取位置的方法对我来说还不够,所以我想用以下代码做简单的
moveUp和moveDown方法:
public function moveUp() {
++$this->position;
}
public function moveDown() {
if($this->position != 0)
--$this->position;
}
Run Code Online (Sandbox Code Playgroud)
通过此实现,moveUp方法没有限制使用已经最大位置递增项目.禁止递增此类物品的最佳方法是什么?我听说直接在实体中进行自定义查询不是一个好习惯,那么如何检查项目是否已经具有最大值?
注意:在Symfony2 中通过RabbitMQBundle使用RabbitMq。
我的制作人发送这样的消息:
$message = array(
'class' => get_class($receiver),
'id' => $receiver->getId(),
'stepNumber' => 1,
'errorCount' => 0
);
Run Code Online (Sandbox Code Playgroud)
消费者$receiver从数据库中检索并给他发送一封电子邮件。
public function execute(AMQPMessage $msg)
{
//Step1 - retrieve user from db
//Step2 - send email
//Step3 - update stuff in database
}
Run Code Online (Sandbox Code Playgroud)
为了跟踪错误,我想在每一步处理异常。如果在第3步抛出异常,我想修改stepNumber为3,将errorCountin增加1 $msg,最后$msg通过返回重新排队false。
这具有以下优点:
errorCount > 5,我只是丢弃消息.. return false。这会很棒,但是:
$msg在RabbitMQ重新排队之前修改它?我正在尝试使用Memcached作为在HHVM 3.1.0下运行的Symfony 1.4的会话
但我似乎得到了这个错误:
\nFatal error: No storage module chosen - failed to initialize session in /sites/SecureAccountsServices/lib/vendor/symfony/lib/storage/sfSessionStorage.class.php on line 93
Run Code Online (Sandbox Code Playgroud)
下面是我的HHVM的php.ini文件:
; php options
pid = /var/run/hhvm/pid
display_startup_errors = On
error_reporting = E_ALL
display_errors = On
session.save_handler = memcache
session.save_path = "tcp://10.32.32.161:11211,tcp://10.32.32.162:11211"
; hhvm specific
hhvm.server.port = 9000
hhvm.server.type = fastcgi
hhvm.server.default_document = index.php
hvvm.server.source_root = /sites/SecureAccountsServices/oauth
hhvm.eval.enable_xhp = true
hhvm.eval.allow_hhas = true
hhvm.eval.enable_hip_hop_syntax=true
hhvm.eval.enable_zend_compat = true
hhvm.log.level = Warning
hhvm.log.always_log_unhandled_exceptions = true
hhvm.log.runtime_error_reporting_level = 8191
hhvm.log.use_log_file = true
hhvm.log.file …Run Code Online (Sandbox Code Playgroud) 我无法将数组从symfony 2控制器传递到TWIG模板.我在控制器中使用此代码:
$searchTerms['color'] = "Red";
return $this->render('TestBundle::search.html.twig',
array(
"searchTerms" => $searchTerms));
Run Code Online (Sandbox Code Playgroud)
在twig模板中,我试图像这样访问变量:
两者都没有输出,空字符串,所以看起来数组来到模板但它的元素是空的.
怎么了?
从我在这里看到的,在查询字符串参数中保存敏感数据(如access_token)不是一个好主意.
即:我试图避免这种情况:
http://localhost.dev/web/app_dev.php/api/articles?access_token=NzJhNz.....
Run Code Online (Sandbox Code Playgroud)
因此,我尝试使用access_tokenAuthorization标头中的api请求(这里建议使用.当尝试这样做时,我收到以下错误:
{
"error": "access_denied",
"error_description": "OAuth2 authentication required"
}
Run Code Online (Sandbox Code Playgroud)
但是,请求与此完全相同,并且令牌似乎已正确设置:
GET /web/app_dev.php/api/articles HTTP/1.1
Host localhost.dev
Authorization access_token=N2FmNzhhNGM2MTI5N2JhMWJlYjEdZjA0ZWM3ZTRhMTM1OGM0ODJjMzQzYjM7NTk3ZTEzNTVjZDczZTljMDk2MQ
Accept-Encoding gzip, deflate
Accept application/json
Accept-Language en;q=1, fr;q=0.9, de;q=0.8, ja;q=0.7, nl;q=0.6, it;q=0.5
Connection keep-alive
User-Agent Localhost/1.0 (iPhone; iOS 6.1.4; Scale/2.00)
Run Code Online (Sandbox Code Playgroud)
有没有人知道这是否可行FOSOAuthServerBundle?
注意:我在浏览器中验证过,令牌仍然有效(未过期).
symfony ×8
php ×4
doctrine-orm ×2
amqp ×1
database ×1
doctrine ×1
hhvm ×1
oauth-2.0 ×1
rabbitmq ×1
session ×1
symfony-1.4 ×1
symfony-2.1 ×1
twig ×1