Php site structure

与世无争的帅哥 提交于 2019-12-10 11:57:25

问题


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:


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




回答2:


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.




回答3:


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.




回答4:


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




回答5:


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.




回答6:


Have a look at Apache's mod_rewrite. Something as simple as the code below would do the trick. I wouldn't make a decision about architecture, if it could be a case that learning to use mod_rewrite would solve your problem. More than likely it will be useful in the future for you anyway.

RewriteRule ^user/(.*)/$    profile.php?username=$1 [PT]
  • A Beginner's Guide to URL Rewriting

Edit: The Front Controller pattern does not scale. For example if one part of your application is more heavily used than others, if you are using a front controller you can not scale that particular request.




回答7:


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




回答8:


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.



来源:https://stackoverflow.com/questions/1080981/php-site-structure

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!