refactored

This commit is contained in:
Patrick 2014-09-12 23:21:50 +02:00
parent a41adda408
commit 5e7186c67a
5 changed files with 72 additions and 62 deletions

View file

@ -1,6 +1,6 @@
[next >>](2-http.md)
[next >>](2-composer.md)
### Setting up the front controller
### Front Controller
To start, create an empty directory for your project. You also need an entry point where all requests will go to. This means you will have to create an `index.php` file.
@ -40,53 +40,4 @@ Now would be a good time to commit your progress. If you are not already using g
What you have set up now is called a [front controller](http://en.wikipedia.org/wiki/Front_Controller_pattern). All requests are going to the same file that then decides what to do with it. This is a very common software design pattern.
### Introducing composer
Just because you are not using a framework does not mean you will have to reinvent the wheel every time you want to do something. For PHP there is a dependency manager called composer that you can use to pull in 3rd party packages for your application.
If you don't have composer installed already, head over to the [website](https://getcomposer.org/) and install it. You can find composer packages for your project on [packagist](https://packagist.org/).
Create a new file in your project root folder called `composer.json`. This is the composer configuration file that will be used to configure your project and it's dependencies. It must be valid json or composer will fail.
Add the following content to the file:
```
{
"name": "Project name",
"description": "Your project description",
"keywords": ["Your keyword", "Another keyword"],
"license": "MIT",
"authors": [
{
"name": "Your Name",
"email": "your@email.com",
"role": "Creator / Main Developer"
}
],
"require": {
"php": ">=5.5.0"
},
"autoload": {
"psr-4": {
"Example\\": "src/"
}
}
}
```
In the autoload part you can see that I am using the `Example` namespace for the project. You can use whatever fits your project there, but from now on I will always use the `Example` namespace in my examples. Just replace it with your namespace in your own code.
Open a new console window and navigate into your project root folder. There run `composer update`.
Composer creates a `composer.lock` file that locks in your dependencies and a vendor directory. To remove those from your git repository, add a new file in your project root folder called `.gitignore` with the following content:
```
composer.lock
vendor/
```
This will exclude the included file and folder from your commits. For which would be a good time now by the way.
Now you have successfully created an empty playground which you can use to set up your project.
[next >>](2-http.md)
[next >>](2-composer.md)

52
2-composer.md Normal file
View file

@ -0,0 +1,52 @@
[<< previous](1-front-controller.md) | [next >>](3-error-handler.md)
### Composer
Just because you are not using a framework does not mean you will have to reinvent the wheel every time you want to do something. For PHP there is a dependency manager called composer that you can use to pull in 3rd party packages for your application.
If you don't have composer installed already, head over to the [website](https://getcomposer.org/) and install it. You can find composer packages for your project on [packagist](https://packagist.org/).
Create a new file in your project root folder called `composer.json`. This is the composer configuration file that will be used to configure your project and it's dependencies. It must be valid json or composer will fail.
Add the following content to the file:
```
{
"name": "Project name",
"description": "Your project description",
"keywords": ["Your keyword", "Another keyword"],
"license": "MIT",
"authors": [
{
"name": "Your Name",
"email": "your@email.com",
"role": "Creator / Main Developer"
}
],
"require": {
"php": ">=5.5.0"
},
"autoload": {
"psr-4": {
"Example\\": "src/"
}
}
}
```
In the autoload part you can see that I am using the `Example` namespace for the project. You can use whatever fits your project there, but from now on I will always use the `Example` namespace in my examples. Just replace it with your namespace in your own code.
Open a new console window and navigate into your project root folder. There run `composer update`.
Composer creates a `composer.lock` file that locks in your dependencies and a vendor directory. To remove those from your git repository, add a new file in your project root folder called `.gitignore` with the following content:
```
composer.lock
vendor/
```
This will exclude the included file and folder from your commits. For which would be a good time now by the way.
Now you have successfully created an empty playground which you can use to set up your project.
[<< previous](1-front-controller.md) | [next >>](3-error-handler.md)

View file

@ -1,6 +1,6 @@
[<< previous](1-setup.md) | [next >>](3-.md)
[<< previous](2-composer.md) | [next >>](4-http.md)
### Error handling
### Error Handler
The first package for the project will be an error handler that will provide you with nice errors. A nice error page with a lot of information for debugging goes a long way during development.
@ -59,9 +59,5 @@ throw new \Exception;
You should now see a nice error page with the line highlighted where you throw the exception. If not, go back and debug until you get it working. Now would also be a good time for another commit.
### HTTP abstractions
PHP already has a few things built in to make working with HTTP easier. For example there are the [superglobals](http://php.net/manual/en/language.variables.superglobals.php) that contain the request information.
These are good if you just want to get a quick and dirty script runnin. But if you want to write clean, maintanable, [SOLID](http://en.wikipedia.org/wiki/SOLID_%28object-oriented_design%29) code, then you will want a class with a nice object oriented interface that you can use in your application.
[<< previous](2-composer.md) | [next >>](4-http.md)

9
4-http.md Normal file
View file

@ -0,0 +1,9 @@
[<< previous](3-error-handler.md)
### HTTP
PHP already has a few things built in to make working with HTTP easier. For example there are the [superglobals](http://php.net/manual/en/language.variables.superglobals.php) that contain the request information.
These are good if you just want to get a quick and dirty script runnin. But if you want to write clean, maintanable, [SOLID](http://en.wikipedia.org/wiki/SOLID_%28object-oriented_design%29) code, then you will want a class with a nice object oriented interface that you can use in your application.
to be continued...

View file

@ -6,9 +6,11 @@ I saw a lot of people coming into the stackoverflow PHP chatroom that asked if X
So my goal with this is to provide an easy resource that people can be pointed to. In most cases a framework does not make sense and writing an application from scratch with the help of some 3rd party packages is much, much easier than some people think.
So let's get started right away with the [setup](1-setup.md).
So let's get started right away with the [first part](1-front-controller.md).
### Parts
* [1. Setting up the project](1-setup.md).
* [2. HTTP abstraction](2-http.md).
1. [Front Controller](1-front-controller.md).
2. [Composer](2-composer.md).
3. [Error Handler](3-error-handler.md).
4. [HTTP](4-http.md).