/
index.html
132 lines (118 loc) · 4.7 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<!doctype html>
<html>
<head>
<title>A PHP Project Checklist</title>
<style>
body {
font-size: 18px;
margin-bottom: 50px;
font-family: 'Segoe UI','Open Sans',sans-serif;
}
h1.heading { text-align:center; }
li { list-style: square; }
.left { float:left; }
.right { float:right; }
.clear { clear:both; }
.btn {
display: inline-block;
margin: 0 10px 0 0;
padding: 5px 15px;
font-size: 24px;
font-family: "Bitter",serif;
line-height: 1.8;
appearance: none;
box-shadow: none;
border-radius: 0;
color: #fff;
background-color: #6496c8;
text-shadow: -1px 1px #417cb8;
border: none;
}
.btn:focus {
outline: none
}
</style>
</head>
<body>
<div class="left">
<!-- twitter share button start -->
<a target="_blank" href="https://twitter.com/share" class="twitter-share-button" data-text="A #PHP Project #Checklist" data-via="sarfraznawaz" data-size="large" data-count="none">Tweet</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
<!-- twitter share button end -->
</div>
<div class="right">
<a target="_blank" class="btn" href="https://github.com/codeinphp/php-project-checklist">Fork Me</a>
</div>
<div class="clear"></div>
<h1 class="heading">A PHP Project Checklist</h1>
<hr>
<h3>Open Source Specific</h3>
<ul>
<li>
Readme
<ul>
<li>It should contain the "Usage" section</li>
<li>It should contain the "Installation" section</li>
<li>It should contain the "Requirements" section</li>
<li>It should contain the "Contributing" section (via CONTRIBUTING file)</li>
<li>It should contain the "Credits" if you prefer</li>
<li>It should contain the "License" if you prefer (file "LICENSE" must be present in project root)
<ul>
<li>GPL: If you want any modified versions of your code to be used only in open-source software</li>
<li>LGPL: If your code is designed to be a standalone component that may be included in other applications without modification</li>
<li>MIT: Allows for use and redistribution of code so long as the license and copyright are included along with it.</li>
</ul>
</li>
</ul>
</li>
<li>Semantic Versioning (<a target="_blank" href="http://semver.org/">more</a>)</li>
<li>Github page (<a target="_blank" href="https://pages.github.com/">more</a>)</li>
<li>A Getting Started Document</li>
<li>Continuous Integration (<a target="_blank" href="http://en.wikipedia.org/wiki/Continuous_integration">more</a>)</li>
<li>Bug Tracking integrated with the source control</li>
<li>A style guide to keep the code consistent</li>
<li>A forum for the community to get support, share ideas, etc.</li>
<li>Should allow installation via composer (<a target="_blank" href="https://getcomposer.org/">more</a>)</li>
<li>Auto-Generated Documentation</li>
<li>Manual</li>
</ul>
<h3>PHP Project Specific</h3>
<ul>
<li>Project Architecture Planning (decide which framework to use, which design patterns to follow: MVC, HMVC, DDD, etc)</li>
<li>Automated unit tests and builds to push update to the website</li>
<li>Proper folder structure such as src for source, vendor for dependencies, tests for tests, config, etc</li>
<li>
Coding Specific (PHP, CSS, Javascript)
<ul>
<li>PSR standards (<a target="_blank" href="http://www.php-fig.org/">more</a>)</li>
<li>
Write SOLID code (<a target="_blank" href="http://en.wikipedia.org/wiki/SOLID%28object-orienteddesign%29">more</a>)
<ul>
<li>Single Responsibility Principle</li>
<li>Open/Closed Principle</li>
<li>Liskov Substitution Principle</li>
<li>Interface Segregation Principle</li>
<li>Dependency Inversion Principle</li>
</ul>
</li>
<li>
Avoid STUPID code (<a target="_blank" href="http://nikic.github.io/2011/12/27/Dont-be-STUPID-GRASP-SOLID.html">more</a>)
<ul>
<li>Singleton</li>
<li>Tight coupling</li>
<li>Untestability</li>
<li>Premature Optimization</li>
<li>Indescriptive Naming</li>
<li>Duplication</li>
</ul>
</li>
<li>Monolog (psr-compliant logger)</li>
<li>Validators: CSSLint, JSHint, PHPCI, etc</li>
<li>Use SPL Exceptions (<a target="_blank" href="http://php.net/manual/en/spl.exceptions.php">more</a>)</li>
<li>For CSS, use preprocessor like SASS or LESS</li>
<li>Tools: Choose from Awesome PHP (<a target="_blank" href="https://github.com/ziadoz/awesome-php">more</a>)</li>
</ul>
</li>
</ul>
</body>
</html>