小编Chr*_*ris的帖子

如何阻止Symfony截断我的POSTed对象?

我正在使用Symfony 2.6并需要发布相当大量的数据(~95000 +字节).发布到服务器工作正常,我使用我的Symfony控制器访问我发布的数据

$request->get('myData')
Run Code Online (Sandbox Code Playgroud)

但是,只有部分对象实际上转发到我的控制器.我可以在Symfony分析器上看到这个,它向我展示了对象和实际原始发布的表单编码数据.表单编码数据是完整的,而对象在某些时候就会崩溃.因此,由于服务器接收到所有数据,因此不能由PHP POST限制引起.

这是我的对象具有的格式(由Symfony Profiler格式化):

[
    0 => [
      firstKey => firstValue0,
      secondKey => secondValue0,
      thirdKey => thirdValue0
    ]
    1 => [
      firstKey => firstValue1,
      secondKey => secondValue1,
      thirdKey => thirdValue1
    ]

    ...etc...

    333 => [
      firstKey => firstValue333,
      secondKey => secondValue333
    ]
]
Run Code Online (Sandbox Code Playgroud)

数组中的所有对象都应该具有相同的三个键.另外,通过查看原始发布的内容,应该有800个条目.但是,正如您所看到的,Symfony停止在条目333处解释输入,甚至不完全解释这个输入,因为它缺少最后一个键值对.

这让我觉得Symfony对它将要执行的输入解析量有限制.有谁知道我可以在哪里调整这个限制?或者还有其他我可能做错的事情?

php post symfony

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

如何使用注释首先在Doctrine 2集合上订购NULL值?

我有一个使用Symfony 2并包含Doctrine 2实体的项目.其中一些实体彼此相关.此关联由注释定义:

/**
 * @ORM\OneToMany(targetEntity="Event", mappedBy="firstEntityId" cascade={"persist", "remove"})
 * @ORM\OrderBy({"dateEnd" = "DESC", "dateBegin" = "DESC"})
*/
private $events;
Run Code Online (Sandbox Code Playgroud)

如您所见,此关联包含多个具有开始和结束日期的事件.在检索此集合时,我希望最多的事件(即那些尚未结束或最近结束的事件)先排序.

当前方法的问题在于它将NULL在所有其他事件之后对结束日期进行排序.

如何告诉Doctrine以结束日期为NULL先排序事件,然后按降序结束日期对剩余事件进行排序?

到目前为止,我已经看到了几个关于如何告诉Doctrine如何订购实体的问题.但是,他们都没有提到注释.例如在Doctrine 2 Order By ASC中建议的反转符号的技巧和最后的Null值不起作用,因为Doctrine不接受除属性名称和/ ASCDESC注释之外的任何内容.

php sorting symfony doctrine-orm

4
推荐指数
2
解决办法
3958
查看次数

framework.session.storage_id的有效值是什么?

在Symfony配置中有一个条目framework.session.storage_id.此设置也出现在Symfony配置文档的默认配置中,但未对其进行说明.我的假设是它定义了会话数据存储在服务器端的位置.

我在这个条目中看到的值包括session.storage.mock_file,session.storage.nativesession.storage.filesystem.我不确定这些值究竟意味着什么(例如模拟文件和文件系统之间有什么区别?)并且还认为这不是可能值的完整列表.

那么这个配置密钥控制究竟是什么以及哪些值有效?

config symfony

4
推荐指数
2
解决办法
1870
查看次数

首先在实体框架模型中为生成的代码添加文档

自VS 2010以来,我一直在使用Entity Framework模型.当我构建项目时,EF会生成一个包含所有实体的Model.Designer.cs文件.此设计器文件还包含添加到EDMX文件中的实体的文档.

当我在VS 2012中创建新的EF模型第一个项目时,Model.tt文件被添加到我的EDMX文件中.此T4模板为模型中的每个实体生成单个文件.遗憾的是,EDMX文件中的文档未在生成的代码中使用.

我非常喜欢记录我的模型,因此IntelliSense在使用时会显示出来.到目前为止我找到的唯一解决方法是删除Model.tt和生成的类文件,然后重新启动我的EDMX文件上的代码生成.这将恢复到我在VS 2010中使用的行为.但是,我希望每个实体都有一个单独的文件.

有没有办法(最好使用VS工具而不必修改VS附带的任何文件)在生成的单个类文件中包含EDMX文件中的文档?

编辑:为了进一步说明我的问题,这是一个简单的例子.

假设我的模型看起来像这样:简单的实体框架模型

我在Id属性的Properties窗口中突出显示了我输入文档的部分.

这是EDMX文件中实体的样子:

    <EntityType Name="Entity1">
      <Key>
        <PropertyRef Name="Id" />
      </Key>
      <Property Type="Int32" Name="Id" Nullable="false" annotation:StoreGeneratedPattern="Identity" >
        <Documentation>
          <Summary>This is documentation for the ID property.</Summary>
        </Documentation>
      </Property>
    </EntityType>
Run Code Online (Sandbox Code Playgroud)

Model.tt生成的类(Entity1.cs)如下所示:

public partial class Entity1
{
    public int Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但是当我为我的模型打开代码生成时,这就是实体在Model.Designer.cs中的样子:

/// <summary>
/// No Metadata Documentation available.
/// </summary>
[EdmEntityTypeAttribute(NamespaceName="Model1", Name="Entity1")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class Entity1 : EntityObject
{
    #region Factory Method

    /// <summary>
    /// Create a new …
Run Code Online (Sandbox Code Playgroud)

code-generation entity-framework visual-studio-2012 ef-model-first

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

为什么我们不需要在`using`范围之外返回一个值?

考虑以下代码:

public int DownloadSoundFile()
{
   using (var x= new X())
   {
       return x.Value;
   }
}
Run Code Online (Sandbox Code Playgroud)

而这段代码:

public int DownloadSoundFile()
{
    if (x!=null)
    {
       return x.Value;
    }
}
Run Code Online (Sandbox Code Playgroud)

第一个代码没有给我们任何编译时错误,但在第二个代码中我们得到这个错误:

并非所有代码路径都返回一个值

这意味着我们应该返回if范围之外的值.

为什么我们必须返回if范围之外的值,但不需要返回using范围之外的值?

c#

3
推荐指数
2
解决办法
228
查看次数

如何通过句柄从 boost::fibonacci_heap 获取元素?

我正在使用boost::fibonacci_heapBoost 1.53.0 中的类来维护可更新的优先级队列。

当我想要更新一个元素时,我需要将堆中的元素与我想要替换它的新元素进行比较。我只想用“较小”版本替换堆中的元素,因此我想在更新之前对它们进行比较。

当我插入元素时,我存储它们的句柄(boost::fibonacci_heap::handle_type)。我在文档fibonacci_heap中看到的所有采用句柄类型的函数仅提供某种写访问权限(update()decrease()increase()),并且不允许我在更新句柄之前检查句柄标识的元素。

fibonacci_heap有没有什么方法可以仅使用句柄来查看 a 中的元素?

c++ boost fibonacci-heap

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

为什么我不能使用迭代器将unique_ptr从集合移动到函数参数?

我有一个setunique_ptr情况,并希望他们都作为参数传递给函数.以下代码演示的示例.

#include <memory>
#include <set>
#include <vector>

using std::set;
using std::unique_ptr;
using std::vector;

void doStuff(unique_ptr<int> ptr)
{
  // doing stuff...
}

int main()
{
  vector<unique_ptr<int>> ptrVector;
  set<unique_ptr<int>> ptrSet;

  for (auto cur = ptrVector.begin(); cur != ptrVector.end(); cur++)
  {
    doStuff(std::move(*cur));
  }

  for (auto cur = ptrSet.begin(); cur != ptrSet.end(); cur++)
  {
    doStuff(std::move(*cur));
  }

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

这会导致以下编译器错误(GCC 4.8.1):

uptrfncall.cpp: In function ‘int main()’:
uptrfncall.cpp:27:25: error: use of deleted function ‘std::unique_ptr::unique_ptr(const std::unique_ptr&) [with _Tp = int; _Dp = …

c++ iterator set unique-ptr move-semantics

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

如何在代码中避免经常输入namespace ::?

我用cocos2dx.当我使用它的类时,我需要cocos2d::经常键入,除非我输入using namespace cocos2d;.

如何避免不断重复命名空间?

c++ cocos2d-iphone

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

将大对象放在堆上的最佳方法是什么?

我正在开发一个项目,需要从数据文件中加载许多对象并将它们存储在内存中.因为我被告知堆栈空间很少并且堆上的数据量应该更多,所以我把所有内容放在堆上.但是,我的印象是我过度了一点.

我目前的设计如下:

class RoadMap
{
    unique_ptr<set<unique_ptr<Node>>> allNodes;

    void addNode(unique_ptr<Node> node)
    {
        this->allNodes->insert(std::move(node));
    }
}

int main()
{
    unique_ptr<RoadMap> map(new RoadMap());

    // open file etc.

    for (auto nodeData : nodesInFile)
    {
        map->addNode(unique_ptr<Node>(new Node(nodeData)));
    }
}
Run Code Online (Sandbox Code Playgroud)

从我现在所理解的,这会产生很多开销,因为我认为我不需要涉及许多独特的指针.如果我理解正确,在"指针链"中只有一个唯一的指针屏障就足够了.但是,我不确定这样做的最佳做法是什么.

选项1

class RoadMap
{
    unique_ptr<set<Node>> allNodes;

    void addNode (Node node)
    {
        this->allNodes->insert(node);
    }
}

int main()
{
    RoadMap map;
    //open file etc.
    for (auto nodeData : nodesInFile)
    {
        map.addNode(Node(nodeData));
    }
}
Run Code Online (Sandbox Code Playgroud)

这样做的好处在于,RoadMap类本身是唯一需要处理堆分配的类,并且在创建时只需要一次set.

选项2

class RoadMap
{
    set<Node> allNodes;

    void addNode (Node …
Run Code Online (Sandbox Code Playgroud)

c++ heap-memory bigdata c++11

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

Serilog不会产生预期的json

我有以下代码.

Serilog.ILogger logger = Serilog.Log.Logger;
logger = new LoggerConfiguration()
   .WriteTo.Sink(new FileSink(@"c:\temp\mylogs.txt", new JsonFormatter(), null)).MinimumLevel.Debug() 
   .CreateLogger();
var newType = new MyType() { Game = "Poker", HasValue = false, Name = "Dave", TimeOfEntry = DateTime.Now.AddDays(-1) };
logger.Debug("This is the new type {NewType} generated at {Time}", newType, DateTime.Now);
Run Code Online (Sandbox Code Playgroud)

日志文件显示如下

{"Timestamp":"2015-02-11T00:53:51.8501574-05:00","Level":"Debug","MessageTemplate":"This is the new type {NewType} generated at {Time}","Properties":{"NewType":"ConsoleTestApp.MyType","Time":"2015-02-11T00:53:51.8491563-05:00"}}
Run Code Online (Sandbox Code Playgroud)

在日志文件输出中没有意义的部分是这样的:

{"NewType":"ConsoleTestApp.MyType", ...
Run Code Online (Sandbox Code Playgroud)

我期待这样的事情.

{"NewType": {Game = "Poker", HasValue = false, Name = "Dave", ...
Run Code Online (Sandbox Code Playgroud)

我做错什么了吗?

c# json serilog

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