小编Mic*_*ick的帖子

存储上传文件的最安全方式

我将上传的文件存储在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

7
推荐指数
1
解决办法
3170
查看次数

创建表单时使用条件语句

我想在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个小部件上?

symfony-forms symfony-2.1

7
推荐指数
1
解决办法
4786
查看次数

使用execute进行Doctrine查询

Option 1Option 2似乎给了相似的结果.使用execute statement而不是通常的getResult()方法是否有特别的优势?

选项1:

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)

选项2:

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)

database doctrine symfony doctrine-orm

7
推荐指数
1
解决办法
2269
查看次数

如何在xml路由文件中提供null默认参数

此代码转储正确$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>=>没有成功

symfony

7
推荐指数
1
解决办法
1966
查看次数

当文件大于post_max_size时,Symfony2验证器不工作

我已成立的upload_max_filesizepost_max_size要在php.ini到32MB.

我正在使用Symfony2.我创建了一个包含文件变量的实体,以便人们可以上传文件:

/**
 * @Assert\File(maxSize="3M")
 */
public $file;
Run Code Online (Sandbox Code Playgroud)
  • 当文件小于3Mb时,文件已正确上载.
  • 当3Mb验证器工作正常时,显示正常的错误消息"文件太大"
  • 但是,当文件> 32Mb(post_max_size)时:

致命错误:第177行/Applications/MAMP/htdocs/Symfony/vendor/symfony/src/Symfony/Component/HttpKernel/Profiler/Profiler.php中允许的内存大小为150994944字节(试图分配62353390字节)

当上传的文件高于post_max_size时,有没有办法让验证器工作?Symfony如何处理大于post_max_size的文件上传?

php symfony

5
推荐指数
1
解决办法
4086
查看次数

在Doctrine 2中对可排序行为进行排序(Symfony 2)

我创建了一个具有Sortable行为的实体,并且有一个关于使用它的问题.
设置和获取位置的方法对我来说还不够,所以我想用以下代码做简单的 moveUpmoveDown方法:

public function moveUp() {
    ++$this->position;
}

public function moveDown() {
    if($this->position != 0)
        --$this->position;
}
Run Code Online (Sandbox Code Playgroud)

通过此实现,moveUp方法没有限制使用已经最大位置递增项目.禁止递增此类物品的最佳方法是什么?我听说直接在实体中进行自定义查询不是一个好习惯,那么如何检查项目是否已经具有最大值?

php symfony doctrine-orm doctrine-extensions

5
推荐指数
1
解决办法
2450
查看次数

修改消费者内部rabbitMQ发送的消息

注意: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重新排队之前修改它?

message-queue amqp rabbitmq symfony

5
推荐指数
1
解决办法
5123
查看次数

HHVM上的Symfony 1.4,memcached作为会话无法正常工作

我正在尝试使用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)

php session symfony-1.4 hhvm

5
推荐指数
1
解决办法
875
查看次数

如何将数组从Symfony 2控制器传递到TWIG模板?

我无法将数组从symfony 2控制器传递到TWIG模板.我在控制器中使用此代码:

$searchTerms['color'] = "Red";
return $this->render('TestBundle::search.html.twig', 
        array(
            "searchTerms" => $searchTerms));
Run Code Online (Sandbox Code Playgroud)

在twig模板中,我试图像这样访问变量:

  1. {{searchTerms ['color']}}
  2. {{searchTerms.color}}

两者都没有输出,空字符串,所以看起来数组来到模板但它的元素是空的.

怎么了?

php symfony twig

4
推荐指数
1
解决办法
3万
查看次数

FOSOAuthServerBundle:将access_token嵌入Authorization标头中

从我在这里看到的,在查询字符串参数中保存敏感数据(如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 oauth-2.0 fosoauthserverbundle

4
推荐指数
1
解决办法
1983
查看次数