codeigniter4 / CodeIgniter4

Open Source PHP Framework (originally from EllisLab)
https://codeigniter.com/
MIT License
5.23k stars 1.87k forks source link

Dev: Project URI Parser #5930

Open MGatner opened 2 years ago

MGatner commented 2 years ago

We have a lot of places where values can be interpolated into a (project) URI. There are also some places that it would be good to add support for such URIs.

I would like to add a new class that handles these centrally, probably a child of URI and maybe merged with the idea of a “project-specific” URI class.

See also: https://github.com/codeigniter4/CodeIgniter4/issues/5923#issuecomment-1110962160

iRedds commented 2 years ago

Why do we need a new class if the URI class is already designed to parse the url? Just add a URI::is($uri) method that will check for a match.

lonnieezell commented 2 years ago

I would agree that I'm not a fan of creating another URI class. I feel that could be confusing. Granted, I'm also a little confused on what you mean by "project specific" URI class.

kenjis commented 2 years ago

I also don't understand what exactly "project specific" URI and "URI meta-segment transformation" are.

MGatner commented 2 years ago

So clearly I haven't explained this well 😅 Maybe "parse" isn't the right word: translate? interpret?

So within Router we have the ability to define a URI like {locale}/foo/bar - this is understood as "a URI within this project using the current locale". What I would like is two parts:

  1. Separate handling for "internal URIs" (this has been discussed lots, see project roadmap and closed PRs)
  2. The ability to use these "segment variables" like {locale} anywhere in the framework.

Does that help?

kenjis commented 2 years ago

In CodeIgniter context, URI has two meaning.

  1. generally speaking URI like https://codeigniter.com/controller/method
  2. The URI path after index.php like controller/method

This class handles 2, doesn't it?

lonnieezell commented 2 years ago

Why does this need a new class? Can't we add placeholder support to the existing URI class and use that? I would expect that info to be available on the one that the IncomingRequest class has.

kenjis commented 1 year ago

I don't know if this is the same as Project URI Parser, but I have come to the view that it would be better to have SiteURL class that extends the URI class representing the site (current) URL.

MGatner commented 1 year ago

Yes, that's precisely the point. Though the intent was to handle more than just the current URL, but also routes, etc

kenjis commented 1 year ago

Yes, {locale}/foo/bar is kind of URI path in the project, and it is corresponding to the real route path en/foo/bar. However, I don't know how SiteURI relates to this route or Routing classes..