7

Eklentiler (Çevik 0.3) Benim grails uygulamasında kullanıyorum, bazı denetleyicileri ve ilişkili eylemleri içerir. Bazı eylemleri (biraz) değiştirmek istiyorum ve bunu nasıl başarabileceğimi merak ediyorum.Eklentilerin denetleyici eylemleri nasıl genişletilir/geçersiz kılınır?

Eklenti denetleyicimden miras alan ve bazı eylem uygulamasının geçersiz kıldığı bir çocuk denetleyicisi oluşturabilir miyim? Veya başka bir denetleyicide bulunan başka bir Denetleyici aynı eklenti ile ekleyebilir miyim?

Aslında gerçekten anlamak istediğim şey: Grails, isim çakışmaları olduğunda numaralı telefonu aramak için hangi denetleyici eyleminin nasıl belirlendiğini belirler?

cevap

8

bir eklenti PluginController isimli controller ve geçersiz kılmak istediğiniz bir eylemin 'foo' olan varsayarsak, denetleyici alt sınıf:

class MyController extends PluginController { 

    def foo = { 
     ... 
    } 
} 

ama UrlMappings bazı işler yapmak gerekir:

class UrlMappings { 

    static mappings = { 
     "/$controller/$action?/$id?" { 
     constraints {} 
     } 

     "/myController/foo/$id?"(controller: "myController", action: "foo") 
     "/myController/$action?/$id?"(controller: "pluginController") 
     "/pluginController/$action?/$id?"(controller: "errors", action: "urlMapping") 

     "/"(view:"/index") 
     "500"(view:'/error') 
     "404"(controller: "errors", action: "notFound") 
    } 
} 

ve bu bir ErrorsController bağlıdır:

class ErrorsController { 

    def notFound = { 
     log.debug "could not find $request.forwardURI" 
    } 

    def urlMapping = { 
     log.warn "unexpected call to URL-Mapped $request.forwardURI" 
     render view: 'notFound' 
    } 
} 

rend eski "eşlenmemiş" kontrolör eylemlerini çağırırsanız, bir 404 sayfa olur. Uygun bir 404 sayfasını göstermek için grails-app/views/errors/notFound.gsp oluşturmanız gerekir.

İlk URL eşlemesi, geçersiz kılmanızın çağrılmasını sağlar. Diğer her şey orijinal denetleyiciye yönlendirir. Ve 3. doğrudan erişim için 404 gönderir.

+0

Burt, eklenti "404" i tanımlarsa (view: '/ error') '), bunu kendi" 404 "eşleştirmeme göre geçersiz kılabilir, ancak bunun yerine özel denetleyicideki bir eylemi uygulayabilir miyim? – raffian

0

Orijinal sınıfı alt sınıflara ayırır ve ihtiyacınız olan davranışı geçersiz kılar. Ben başka bir eklenti ile çok şey yapıyorum ve harika çalışıyor.

Eklentiyi satır içi olarak kullanmak ve yalnızca orijinal kaynağı değiştirmek için alternatif bir yöntem elbette, ancak daha da kötüsü, yükseltmelerle ilgili bir sorununuz olacak.

Ben de Nimble bir kullanıcısıyım ve size uzatma başkaları tarafından kullanılabileceğini düşünüyorsanız, o zaman katkıda bulunabilir - çevik kesinlikle çok genişletilebilir olduğundan emin olmak için çalıştı.

+0

Jean başına hem alt sınıfları eklentisi kontrolör ve çalışmış aynı isme sahip bir denetleyici oluşturma Grails hala rota eski benim istekleri eylemler (ve alt sınıf denetleyici eylemine değil). Çalıştırmak için, inline eklenti içindeki eylem adını değiştirmem gerekiyordu. Grails'i, başka bir yerine bir denetleyici eylemi kullanmaya zorlamayı biliyor musunuz? – fabien7474

2

Grails 1.3.7 ve Nimble eklentisi ile 0.4 Burt'un UrlMapping çözümünün benim için işe yaramadığını buldum. Ancak, sadece ben aslında orijinal denetleyici sınıflara VE bazı eylemleri geçersiz kılma ANCAK am, Burt'un other answer

class AuthController extends grails.plugins.nimble.core.AuthController{ 

    private static String TARGET = 'grails.plugins.nimble.controller.AuthController.TARGET' 

    def login = { 
     // custom logic here  
    } 
} 
İlgili konular