小编roo*_*m13的帖子

通过注释定义的路径中的可选参数

是否有更优雅的方式在注释路由中定义可选参数然后定义2个注释?

我是这样做的:

/**
*
* @Route("/view/{lang}/{file}", name="legacy_translation_view_file")
* @Route("/view/{lang}", name="legacy_translation_view")
* @Template()
*/
public function viewAction($lang,$file=null)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)

我已经看到注释类有一个名为"默认值"的字段,但对语法并不安静

谢谢

symfony

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

Rails应用程序中数据对话的最佳实践

我目前正在开发一个大型的自定义内容管理解决方案,以处理许多不同的内容类型(模型)及其关系.

整个数据模型建立在活动记录之上,具有内容导入和导出以及与其他服务同步的功能(例如,将内容更改推送到智能手机的移动同步).

对于这些任务,我有许多数据对话,一方面是活动记录模型,另一方面是许多不同的和已经存在的目标格式.

  • JSON REST服务以反映模型层中的更改
  • rss feed发布新内容
  • 导入/导出为专有xml格式
  • 等等

对于新的数据格式,我可以自己定义结构,在大多数情况下意味着,让rails通过使用整洁的编组功能来处理它

    format.html do
      render 'show'
    end
    format.xml do
      render xml: { content:@content }
    end
    format.json do
      render json: { content:@content }
    end
Run Code Online (Sandbox Code Playgroud)

但是,在必须提供现有数据模式的情况下,必须进行多次对话:

重命名键:在模型中,每个对象都由id属性标识,但在目标格式中,objects属性是名称uid或OBJECT-ID ...

内联相关对象:鉴于我有一个名为Person的模型,它与Address模型相关.使用Rails xml序列化时,地址对象将被省略或在标签下内联.在给定的目标格式中,地址可能必须在Person对象中内联,这意味着以下输出将是nedded

<person>
   <name>Ben</name>
   <street>Some Street</street>
   <city>Berlin</city>
</person>
Run Code Online (Sandbox Code Playgroud)

值转换: 可能需要日期属性作为unix时间戳而不是utc字符串

天真的溶解:

所有这些转换都可以在需要时手动完成,这意味着只需添加一些创建目标数据结构的ruby代码:

data = {}
Person.all.each do |p|
    # rename property
    data[:guid] = p.id
    data[:name] = p.full_name
    # inline relation
    data[:street] = p.primary_address.street    
    data[:city] = p.primary_address.locality
    data[:member_since] = p.created_at.format(...)
end
render xml: { persons:data} …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails data-conversion

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

从应用程序中的自定义文件夹内的命名空间自动加载

我们目前正在为ROR 3.2开发一个自定义cms引擎.在这个过程中,我们想要成为rails应用程序中的一等公民,这意味着它们应该位于应用程序的app文件夹和它的插件之下.

目前我们有以下类型:

  • 数据源
  • 数据类型
  • 视图

我在app文件夹下创建了多个目录来保存这些:

  • 应用程序/ DATA_SOURCE
  • 应用程序/ DATA_TYPE
  • 应用程序/视图

接下来会有更多类型,我有点担心用这么多目录污染app文件夹.因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含由cms定义的所有类型.

所有类都应该在MyCms命名空间内,目录布局应如下所示:

  • 应用程序/ my_cms/DATA_SOURCE
  • 应用程序/ my_cms/DATA_TYPE
  • 应用程序/ my_cms /视图

但是现在我遇到了自动加载问题,因为rails默认自动加载会检测到这样的路径:

  • 应用程序/ DATA_SOURCE/my_cms
  • 应用程序/ DATA_TYPE/my_cms
  • 应用程序/视图/ my_cms

但是这样我就不会将所有对象类型分组到一个目录中.

我想要的有点类似于查看隔离引擎的分组.例如,在Devise中,所有视图都分组在views/devise子目录中.

知道如何在没有太多自定义实现的情况下实现这一目标吗?

ruby ruby-on-rails ruby-on-rails-3

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

验证器组件中的转换

我目前正在将Symfony Validator组件集成到自定义PHP应用程序中.到目前为止,一切都工作得很好,我可以验证我的用户输入.

现在我想将验证消息转换为另一个语言环境并集成了翻译组件(无论如何由于DefaultTranslator中的TranslatorInterface的延迟而需要它).

默认转换程序仅支持硬编码到ValidationConstraints中的语言环境.据我所知,我需要指定一个自定义转换器实例,它从Validator组件中的xliff文件加载字符串.

这是我有多远,但德国翻译可悲的是没有加载:

    $translator = new Translator('de_DE');
    $translator->setFallbackLocale('en_GB');
    $translator->addLoader('xliff', new XliffFileLoader());

    $builder = new ValidatorBuilder();
    $validator = $builder
            ->setTranslator($translator)
            ->getValidator();
    $violations = $validator->validateValue($input, self::getValidationConstraints());
Run Code Online (Sandbox Code Playgroud)

有什么建议我可能会错过这里吗?

symfony symfony-components

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

如何访问服务容器以使用JMSSerializer?

根据文件:

该容器可用于任何传统的Symfony2控制器,您可以通过get()快捷方法访问容器的服务

所以,我设法通过调用以下方法在Controller中调用和使用JMSSerializer:

$serializer = $this->get('serializer');
Run Code Online (Sandbox Code Playgroud)

但是,如何在自定义类中调用容器?相同的命令失败,表示调用未定义方法get()的致命错误.

symfony jmsserializerbundle

2
推荐指数
1
解决办法
4839
查看次数