代码示例:
public class Foo
{
public class Bar
{
public void printMesg(String body)
{
System.out.println(body);
}
}
public static void main(String[] args)
{
// Creating new instance of 'Bar' using Class.forname - how?
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以创建类Bar的新实例给它的名字?我试着用:
Class c = Class.forName("Foo$Bar")
Run Code Online (Sandbox Code Playgroud)
它找到了类,但是当我使用c.newInstance()时它会抛出InstantiationException.
使用下面的代码,当我访问/ test2时,它以404响应 - 未找到./ test1正常工作.这是为什么?尽管路由器实现了http.Handler接口,但是不允许嵌套吗?
package main
import (
"fmt"
"net/http"
"github.com/gorilla/mux"
)
func main() {
mainRouter := mux.NewRouter()
subRouter := mux.NewRouter()
mainRouter.HandleFunc("/test1", func(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "test1") })
subRouter.HandleFunc("/test2", func(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "test2") })
mainRouter.Handle("/", subRouter)
http.ListenAndServe(":9999", mainRouter)
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我的主要目标是添加一些初始工作,这些工作对于subRouter中的所有路由都是常见的,并且仅适用于它们.更具体地说,我想使用Negroni作为我的中间件orchiestrator.在Negroni网站上有一个将中间件添加到路由组的示例:
router := mux.NewRouter()
adminRoutes := mux.NewRouter()
// add admin routes here
Create a new negroni for the admin middleware
router.Handle("/admin", negroni.New(
Middleware1,
Middleware2,
negroni.Wrap(adminRoutes),
))
Run Code Online (Sandbox Code Playgroud)
Negroni基本上执行每个参数的ServeHTTP方法,因为它们都实现了http.Handler.它按顺序执行它们,因此路由器路由将是最后的.
我熟悉SubrouterMux中的概念,但AFAIK我不能像上面的例子那样使用它,特别是我不能在mainRouter和它之间注入任何东西Subrouter.这就是嵌套看起来更灵活的原因.
我在我的应用程序中有实体,它有2个可翻译的字段,使用Doctrine Translatable Extension:
class Page implements Translatable
{
/......
/**
* @var string $name
* @Gedmo\Translatable
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;
/**
* @var text $content
* @Gedmo\Translatable
* @ORM\Column(name="content", type="text")
*/
private $content;
/........
}
Run Code Online (Sandbox Code Playgroud)
我使用一个表进行多个实体翻译.现在我想使用一个表单来获取这些属性的原始和翻译(到1种语言)值,因此它应该有4个字段.
我已经定义了从AbstractType派生的新表单,并尝试使用FormBuilder添加这两个字段,但它表示它们对应的实体不包含这些字段.我试图将这些字段添加到实体,并为它们声明getter,但我知道获得实体翻译的唯一方法是使用专用实体管理器和AFAIK提供实体管理器访问实体不是好习惯.
有没有办法使用表单来处理这样的事情?