Giter Club home page Giter Club logo

Comments (11)

TCB13 avatar TCB13 commented on July 16, 2024

I found out that $handler on Dispatcher.php, line 47, has the information I need. However I'm not sure as how to pass it to the filter since it has a $response parameter that seems to be null, always.

Is it safe to pass $handler into there as well?

Thank you.

from phroute.

mrjgreen avatar mrjgreen commented on July 16, 2024

The response is null for before filters, because there hasn't been any response created at that stage.
For after filters, the response is whatever was returned from the route handler.

I can see what you are trying to get to, but I don't think there is an easy way to do that currently. Let me think about this over the weekend and see what I can do.

I've been working on a new version of phroute where the objects composition is much better and would allow you to do this much more easily.

from phroute.

TCB13 avatar TCB13 commented on July 16, 2024

Hello!

I decided to try to hack it a bit... and it seems to work, please check this commit: f330921

I know, its bad, but I tested it in one of my weekend projects and it seems to work fine.

$router->filter("auth", function($result, $handler) {
    print $handler[0] . "->" . $handler[1] . "()";
    exit();
});

// Output: API\Controller\Test->manualMethod()

Your tests still pass. I didn't write a specific test for this because I'm not familiar with your test code ;).

Have a nice weekend!

from phroute.

TCB13 avatar TCB13 commented on July 16, 2024

Any news on this?

from phroute.

Ant59 avatar Ant59 commented on July 16, 2024

I would also like to know if this is possible. I need to access the handler in a filter.

from phroute.

TCB13 avatar TCB13 commented on July 16, 2024

@Ant59 check my experimental commit above. It works in the described way.

from phroute.

Ant59 avatar Ant59 commented on July 16, 2024

Great, thanks! I'll give it a go 👍

from phroute.

TCB13 avatar TCB13 commented on July 16, 2024

@Ant59 great! I'll be waiting some feedback.

from phroute.

Ant59 avatar Ant59 commented on July 16, 2024

Hmmm, it seems it's not exactly what I wanted. I need to access the handler before dispatch of ALL routes, and I don't want to have to include every route in a filter group since I need it to be extensible for addons to include routes as easy as possible.

Why is the dispatcher class locked up so tight with private visibility? I can't even access these functions from a child class using extend.

from phroute.

TCB13 avatar TCB13 commented on July 16, 2024

My code will only give you the class name / method that will be used to dispatch the request later... Then you can do whatever you want with the class name. Whatever you do on the filter will be done before the dispatch actually happens.

In my case, I'm using the filter above so I can get the name of the class/method that will be used to dispatch the request and do simple CRUD permissions on that. For instance... check is there's a user session and if the user has permissions to access Controllers/Users::list if not redirect to login page or some other place before the dispatch happens.

from phroute.

mrjgreen avatar mrjgreen commented on July 16, 2024

@Ant59 Maybe have a look at this version I started to refactor which exposes the handler as a separate entity via an interface.

https://github.com/mrjgreen/phroute/tree/handler

The reason the class is private, is to prevent extension of the class's internal methods. Inheritance is not the best design pattern when attempting to add functionality - instead composition should be favoured.

Obviously pragmatism should come into it too and I don't want to prevent you from being able to do what you need to, but in this case I would rather spend some time completing the new refactored branch, rather than hacking the current one.

from phroute.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.