是否有更优雅的方式在注释路由中定义可选参数然后定义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)
我已经看到注释类有一个名为"默认值"的字段,但对语法并不安静
谢谢
我目前正在开发一个大型的自定义内容管理解决方案,以处理许多不同的内容类型(模型)及其关系.
整个数据模型建立在活动记录之上,具有内容导入和导出以及与其他服务同步的功能(例如,将内容更改推送到智能手机的移动同步).
对于这些任务,我有许多数据对话,一方面是活动记录模型,另一方面是许多不同的和已经存在的目标格式.
对于新的数据格式,我可以自己定义结构,在大多数情况下意味着,让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) 我们目前正在为ROR 3.2开发一个自定义cms引擎.在这个过程中,我们想要成为rails应用程序中的一等公民,这意味着它们应该位于应用程序的app文件夹和它的插件之下.
目前我们有以下类型:
我在app文件夹下创建了多个目录来保存这些:
接下来会有更多类型,我有点担心用这么多目录污染app文件夹.因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含由cms定义的所有类型.
所有类都应该在MyCms命名空间内,目录布局应如下所示:
但是现在我遇到了自动加载问题,因为rails默认自动加载会检测到这样的路径:
但是这样我就不会将所有对象类型分组到一个目录中.
我想要的有点类似于查看隔离引擎的分组.例如,在Devise中,所有视图都分组在views/devise子目录中.
知道如何在没有太多自定义实现的情况下实现这一目标吗?
我目前正在将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)
有什么建议我可能会错过这里吗?
根据文件:
该容器可用于任何传统的Symfony2控制器,您可以通过get()快捷方法访问容器的服务
所以,我设法通过调用以下方法在Controller中调用和使用JMSSerializer:
$serializer = $this->get('serializer');
Run Code Online (Sandbox Code Playgroud)
但是,如何在自定义类中调用容器?相同的命令失败,表示调用未定义方法get()的致命错误.