views:

656

answers:

7

I'm currently in the process of setting my website, largely with php. Though this is my first time using it so I'm running into some problems.

I've got the basics of the site down. Registering, login-in, profile page e.t.c. However this is where I seem to have to make a decision about the site layout.

For instance. Currently a user's profile page has the URL of

mysite.com/profile.php

Ideally what I would like is for it to be is something along the lines of

mysite.com/user/ChrisSalij

From reading this among other things I believe I need a Front Controller style site, though I'm not sure of this, nor where to start with implementing one.

Bearing in mind that I'm pretty new to php and the like, I would appreciate any helpful comments, and links, and constructive critiques.

I'm defiantly will to learn so links to articles and explanations would be excellent. I usually do a fair amount of research on stuff like this. But I'm so new to it that I don't know where to start.

EDIT: I should also add that I'm planning on scaling this website up to the large scale. It's small to start with but there should be quite a few pages if my goals work out. So I'm willing to put the effort in now to get it set up right for the long term. Thanks

+1  A: 

Take a look at URL Rewriting or Apache's mod_rewrite.

Sev
A: 

You should look in to something like the Zend Framework, which provides this functionality for you out of the box.

They have an excellent guide which will get you going in no time.

http://framework.zend.com/docs/quickstart

Mike
dunno who downvoted you, but you didn't deserve it so +1
Mark
Surprising... it was a perfectly valid answer. Thanks!
Mike
A: 

I agree with Sev, this can also be handled with url rewriting. You should also look into frameworks like CakePHP and CodeIgniter that do some things like this for you automatically.

WillCodeForCoffee
+4  A: 

Well, welcome to the world of PHP :)

First of all, a front controller is typically only 1 part of a larger framework known as a MVC (Model-View-Controller). Simply put, a front controller can be though of as the "index" page that all people go to when they come to your site. It handles initiating needed site things and then pulling and running what resouces are needed to handle the user request (typically through the URL, as you have given of mysite.com/user/...). This is an overly simple explanation.

While not necessarily a hard thing to learn, I would recommend looking at a tutorial like this that explains the whole idea and basic implementation of a MVC. They call the front controller a "router" (that's another thing, there are more than 1 way to implement a MVC or it's variants and more than 1 name for the different parts). I don't think it is particularity hard to understand or grasp. Most modern MVC frameworks do implement Object Oriented Programming practices. For a good set of video screencast on PHP (including some basic OOP skills), take a look here.

Lastly, if this is your first big use of PHP and want to implement something like MVC, you might check out something like CakePHP or CodeIgniter. Great frameworks that have good documentation and has done alot of hard work for you. Good luck

Robert DeBoer
Thanks very much Robert. I'm currently looking at codeigniter with great interest. Also that diving into php series is filling in a few gaps on my self thought php. Its very much appreciated.
Chris Salij
Here are a few more tutorial links for CodeIgniter, all from NettutsCodeIgniter Basics - http://net.tutsplus.com/tutorials/php/codeigniter-basics/Create a File Hosting Site with CodeIgniter - http://net.tutsplus.com/tutorials/php/creating-a-file-hosting-site-with-codeigniter/Easy Development with CodeIgniter - http://net.tutsplus.com/videos/screencasts/easy-development-with-codeigniter/
Robert DeBoer
+2  A: 

Assuming you're on apache, you can create a file called .htaccess at the root of your site, and add these lines

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* /index.php?url=$0 [L,QSA]

This will pass all page requests to index.php. In index.php, you'd want to to parse $_GET['url'] and load up the proper page with include. You'll have to sanitize the input and make sure people aren't including anything they shouldn't. You can get the pieces with something like:

list($controller, $username) = explode('/', $_GET['url']);

The typical MVC structure would use controller/action/id. If "action" is omitted though, as in your example, I'd make it default to "view". As in "view" user's profile. The ID would be the username. Typically, each controller is a class, and each action is a function in that class, any parameters after that are passed into the function. There's also an associated view file with each action.

It's a lot of code to give you a full example (I just coded up an MVC framework!) but that should give you the basics to get started.

Definately check out some other frameworks like CakePHP, Kohana/CodeIgniter if you need more details and code examples.

Mark
+2  A: 

Creating a "Front Controller style site" would mean

  1. Using mod_rewrite to intercept all requests into your website/application

  2. Mapping that URL to a PHP class name (your controller) and a method on that controller (typically called action.

However, you don't want to be using PHP directly for this, you want to use either a PHP/MVC Framework, or a PHP based CMS. Example include Joomla, Concrete5, Code Igniter and PHP Cake. This is a "solved" problem.

All of these frameworks have already done the hard work of (among other things) deciding when/how a URL is transformed into a PHP class. By picking one you can ignore re-implementing the wheel and concentrate on your core business (the site you're building).

That's not to say there isn't room for a new framework, either built from scratch or one that combines modules from some other framework (such as the excellent Zend Framework). However, the fact that you're asking such a basic question means you're probably not experienced enough to be the person who should build that (don't feel bad, no one magically has that kind of experience, it only comes with time)

Get some experience under your belt with the existing frameworks, see how they're built and get a feel for how you use them. Then "later", once you have a bunch of real world experience under your belt, if you still feel the need to build your own framework you'll be in a better position to tackle the problem.

Alan Storm
i think you have a problem with your links... :)
Raffael Luthiger
Thanks Raf, FYI you can edit posts here and fix stuff like that when you see it. It's a nice way to build up rep.
Alan Storm
mmhh... I can not edit your comment at the moment. Maybe I need a higher rep score for this. But thanks for the information.
Raffael Luthiger
+1  A: 

I don't know how much knowledge of PHP you have in general. What I can definitely recommend you is downloading and reading the book PHP 5 Power Programming. You can download it for free here. It takes a lot of time to read it but it will definitely help you a lot. (You can just read selective chapters too.)

Another thing I can recommend you is to read the Quick Start Guide from the Zend Framework.(The framework itself is probably too much for you.) But in this guide especially the links to all the external sites are very good. You can learn a lot of theory from it.

And what all the others said: Learn from all the established frameworks.

Raffael Luthiger