2012-04-25 2 views
4

У меня есть настройка фильтра, которая запускает функцию, которая проверяет, присутствует ли пользовательский сеанс для определенных действий, например;CFWheels - проблема с фильтрами «кроме». Имена конфликтов конфликтов

<cffunction name="init"> 

     <cfset filters(through="checkLogin", except="login,register,signin,create,home,profile") /> 

    </cffunction> 

Проблема в том, что это имена действий ... которые конфликтуют с другими контроллерами, которые у меня есть.

Например, у меня есть два пользователя «контролера» и «ссылка». Каждый из них имеет действие под названием создать, так что мой URL, которые так:

/пользователь/создать/ /ссылку/создать/

Как фильтр знать, с которой контроллер связать его с? Есть ли способ префикс некоторых «действий» в предложении «except» с именем контроллера?

Например, может быть что-то вроде:

<cffunction name="init"> 

     <cfset filters(through="checkLogin", except="user/login,user/register,user/signin,link/create,main/home,user/profile") /> 

    </cffunction> 

Я помню, попробовать это, но он не работает и BORKED.

Надеюсь, вы поймете, что я говорю здесь. Я не хочу называть каждое действие в отдельных контроллерах совершенно уникальными именами.

Thanks, Michael.

ответ

3

Вы можете использовать основные наследования для достижения этой цели:

<!--- controllers/Controller.cfc ---> 
<cffunction name="init"> 
    <cfargument name="checkLoginExcept" type="string" required="false" default=""> 

    <cfset filters(through="checkLogin", except=arguments.checkLoginExcept)> 
</cffunction> 

Тогда в любом контроллере ребенка (user, например), вы можете указать, какие действия необходимо исключить. Это хорошо работает, потому что родительский контроллер должен ничего не знать о своих дочерних элементах. Он реализует то, о чем он заботится, и ничего больше.

<!--- controllers/User.cfc ---> 
<cffunction name="init"> 
    <cfset super.init(checkLoginExcept="login,register,signIn,profile")> 
</cffunction> 

Если другой ребенок всегда хочет для checkLogin бежать, то он не должен передавать значение для checkLoginExcept:

<!--- controllers/Foo.cfc ---> 
<cffunction name="init"> 
    <cfset super.init()> 
</cffunction> 
+0

Спасибо - это было именно то, что я искал! Я никогда не думал обо всем аспекте наследования ХФУ ... хороший совет прямо там. –