2009年2月24日星期二

Re: [fw-mvc] modulear application with router for each controller in each application

Thanks,

The dispatcher::classToFilename replaces the '_' with a '/' in.
Thus the url chained by "_" is mapped to the controller in sub directories.
If we use the urls rule as subdirectory-matching,
we must encounter an interpretation problem.

Request:
/admin/tools/other/create
1.longest match
controller = tools_other_create
action = default
2.another match
controller = tooles_other
action = create

I supporse ,the solution of this problem is to set up routes by hand.
Router_Route_Static can make a static routing.
And Router_Route_Regex can make a dynamic routing to sub directories.
These solutions have also an order of matching rules.
Actually, these are functionable.

However, in case anyone needs an automatic routing to sub directories,
he must take the policy which rule to match.

In my case,I have made a custom dispatcher that has these methods
dispatcher::isValidControllerPath($path, $module)
dispatcher::getModuleControllers($module)
And my My_Router_Route_Module::match() check if manually the path
exists in the module's directory. and check if
dispatcher::isValidControllerPath($path, $module)
# considering a performance, matched rule is cached.

On another front, I have an idea of the router that determine the
directory like a RecursiveDirectoryIterator.
In this case, the router checks the path to match the first part and
trys to check the remains to match.
("Router_Route_Chain::match($path, $partial = null) "'s $partial shuld
be to do that?)
But an impracticable dynamic-route-name prevent me from doing that.
By default router use the name it set in addRoute().
If I make a dynamic and recursive router, the name must be got with
ex. $route->getName() recursively.And name shuld be composit structure
like an array.
It is too tricky.

Have you got any insights?

Excuse me ,I am not good at English.
Thanks.


2009/2/24 vadim gavrilov <vadimg88@gmail.com>:
> Thanks,
>
> I assume the '_' is what sets it to know it's a sub directory. Is there a
> way to replace the '_' with a '/' so the link will be
> admin/tools/other/[actionname] i know i can do this with the dispatcher but
> not sure how.
>
> The thing i want to do with the router is have a file called router.php
> inside every controllers sub directory that will add routes to certain
> places. I didn't quite grasp the way i need to use the router class and from
> reading the documentation (what i read so far) it doesn't clearly say where
> you need to define the new instance of the router class. If it's in the
> bootstartup.php file then how can i access it later from each and every
> controller? I can't create a new instance in every controller beacuse that
> will be a bad design practice. How about creating a master controller that
> will extend the zend abstract and that one will create the instance of the
> router? Then i could just extend the master controller in every controller i
> have in my controllers directory? Is this something usable?
>
> Thanks.
>
> On Tue, Feb 24, 2009 at 1:36 AM, Tomoaki Kosugi <kipspro@gmail.com> wrote:
>>
>> Hi
>>
>> This is my guess,you need to set up two as below.
>>
>> 1. Controller Setup
>> 2. Router Setup
>>
>> 1. Using action controllers in sub directories
>> /admin/tools/otherController.php
>> is mapped to below↓
>> className:
>> Admin_Tools_OtherController
>> you can access this controller in this uri.
>> /admin/tools_other/[actionname]/*
>>
>> 2.Router Setup
>> you can add routes from the uri "/admin/tools/other"
>> to the controller named "tools_other" .
>>
>> Excuse me ,I am not good at English.
>>
>> regards
>>
>> --
>> noopable:
>> Tomoaki Kosugi
>>
>>
>> 2009/2/24 vince. <vadimg88@gmail.com>:
>> >
>> > How can i set a rewrite rule class/instance across the entire
>> > application
>> > that i could use sub directories inside the main controllers directory
>> > for
>> > each module? Meaning so i could have this structure:
>> >
>> > /application
>> > /modules
>> > /admin
>> > /controllers
>> > /index
>> > /indexcontroller.php
>> > /othercontroller.php
>> > /tools
>> > /indexcontroller.php
>> > /othercontroller.php
>> > /settings
>> > /indexcontroller.php
>> > /othercontroller.php
>> > /layouts
>> > /site
>> > /controllers
>> > /index
>> > /indexcontroller.php
>> > /othercontroller.php
>> > /tools
>> > /indexcontroller.php
>> > /othercontroller.php
>> > /settings
>> > /indexcontroller.php
>> > /othercontroller.php
>> > /layouts
>> > /library
>> >
>> >
>> > and i could enter the file admin/controller/tools/other as follows:
>> > admin/tools/other trough the url. and basically use sub directories
>> > inside
>> > the controllers directory. what do i need to setup?
>> >
>> > Thanks.
>> >
>>
>
>
>
> --
> Vincent Gabriel.
> Lead Developer, Senior Support.
> Zend Certified Engineer.
>
>
>
>
>

没有评论: