-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathknpu.html
250 lines (217 loc) · 23.4 KB
/
knpu.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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
<!DOCTYPE html>
<html lang="en">
<head prefix="og: http://ogp.me/ns#">
<script src="//cdn.optimizely.com/js/421270022.js"></script>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"><script type="text/javascript">(window.NREUM||(NREUM={})).loader_config={xpid:"Vg4HUlBbGwAHVlFSDgM="};window.NREUM||(NREUM={}),__nr_require=function(t,e,n){function r(n){if(!e[n]){var o=e[n]={exports:{}};t[n][0].call(o.exports,function(e){var o=t[n][1][e];return r(o?o:e)},o,o.exports)}return e[n].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<n.length;o++)r(n[o]);return r}({QJf3ax:[function(t,e){function n(t){function e(e,n,a){t&&t(e,n,a),a||(a={});for(var c=s(e),u=c.length,f=i(a,o,r),d=0;u>d;d++)c[d].apply(f,n);return f}function a(t,e){u[t]=s(t).concat(e)}function s(t){return u[t]||[]}function c(){return n(e)}var u={};return{on:a,emit:e,create:c,listeners:s,_events:u}}function r(){return{}}var o="nr@context",i=t("gos");e.exports=n()},{gos:"7eSDFh"}],ee:[function(t,e){e.exports=t("QJf3ax")},{}],3:[function(t){function e(t){try{i.console&&console.log(t)}catch(e){}}var n,r=t("ee"),o=t(1),i={};try{n=localStorage.getItem("__nr_flags").split(","),console&&"function"==typeof console.log&&(i.console=!0,-1!==n.indexOf("dev")&&(i.dev=!0),-1!==n.indexOf("nr_dev")&&(i.nrDev=!0))}catch(a){}i.nrDev&&r.on("internal-error",function(t){e(t.stack)}),i.dev&&r.on("fn-err",function(t,n,r){e(r.stack)}),i.dev&&(e("NR AGENT IN DEVELOPMENT MODE"),e("flags: "+o(i,function(t){return t}).join(", ")))},{1:20,ee:"QJf3ax"}],4:[function(t){function e(t,e,n,i,s){try{c?c-=1:r("err",[s||new UncaughtException(t,e,n)])}catch(u){try{r("ierr",[u,(new Date).getTime(),!0])}catch(f){}}return"function"==typeof a?a.apply(this,o(arguments)):!1}function UncaughtException(t,e,n){this.message=t||"Uncaught error with no additional information",this.sourceURL=e,this.line=n}function n(t){r("err",[t,(new Date).getTime()])}var r=t("handle"),o=t(6),i=t("ee"),a=window.onerror,s=!1,c=0;t("loader").features.err=!0,t(3),window.onerror=e;try{throw new Error}catch(u){"stack"in u&&(t(4),t(5),"addEventListener"in window&&t(1),window.XMLHttpRequest&&XMLHttpRequest.prototype&&XMLHttpRequest.prototype.addEventListener&&window.XMLHttpRequest&&XMLHttpRequest.prototype&&XMLHttpRequest.prototype.addEventListener&&!/CriOS/.test(navigator.userAgent)&&t(2),s=!0)}i.on("fn-start",function(){s&&(c+=1)}),i.on("fn-err",function(t,e,r){s&&(this.thrown=!0,n(r))}),i.on("fn-end",function(){s&&!this.thrown&&c>0&&(c-=1)}),i.on("internal-error",function(t){r("ierr",[t,(new Date).getTime(),!0])})},{1:5,2:8,3:3,4:7,5:6,6:21,ee:"QJf3ax",handle:"D5DuLP",loader:"G9z0Bl"}],5:[function(t,e){function n(t){i.inPlace(t,["addEventListener","removeEventListener"],"-",r)}function r(t){return t[1]}var o=(t(1),t("ee").create()),i=t(2)(o),a=t("gos");if(e.exports=o,n(window),"getPrototypeOf"in Object){for(var s=document;s&&!s.hasOwnProperty("addEventListener");)s=Object.getPrototypeOf(s);s&&n(s);for(var c=XMLHttpRequest.prototype;c&&!c.hasOwnProperty("addEventListener");)c=Object.getPrototypeOf(c);c&&n(c)}else XMLHttpRequest.prototype.hasOwnProperty("addEventListener")&&n(XMLHttpRequest.prototype);o.on("addEventListener-start",function(t){if(t[1]){var e=t[1];"function"==typeof e?this.wrapped=t[1]=a(e,"nr@wrapped",function(){return i(e,"fn-",null,e.name||"anonymous")}):"function"==typeof e.handleEvent&&i.inPlace(e,["handleEvent"],"fn-")}}),o.on("removeEventListener-start",function(t){var e=this.wrapped;e&&(t[1]=e)})},{1:21,2:22,ee:"QJf3ax",gos:"7eSDFh"}],6:[function(t,e){var n=(t(2),t("ee").create()),r=t(1)(n);e.exports=n,r.inPlace(window,["requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame"],"raf-"),n.on("raf-start",function(t){t[0]=r(t[0],"fn-")})},{1:22,2:21,ee:"QJf3ax"}],7:[function(t,e){function n(t,e,n){t[0]=o(t[0],"fn-",null,n)}var r=(t(2),t("ee").create()),o=t(1)(r);e.exports=r,o.inPlace(window,["setTimeout","setInterval","setImmediate"],"setTimer-"),r.on("setTimer-start",n)},{1:22,2:21,ee:"QJf3ax"}],8:[function(t,e){function n(){u.inPlace(this,p,"fn-")}function r(t,e){u.inPlace(e,["onreadystatechange"],"fn-")}function o(t,e){return e}function i(t,e){for(var n in t)e[n]=t[n];return e}var a=t("ee").create(),s=t(1),c=t(2),u=c(a),f=c(s),d=window.XMLHttpRequest,p=["onload","onerror","onabort","onloadstart","onloadend","onprogress","ontimeout"];e.exports=a,window.XMLHttpRequest=function(t){var e=new d(t);try{a.emit("new-xhr",[],e),f.inPlace(e,["addEventListener","removeEventListener"],"-",o),e.addEventListener("readystatechange",n,!1)}catch(r){try{a.emit("internal-error",[r])}catch(i){}}return e},i(d,XMLHttpRequest),XMLHttpRequest.prototype=d.prototype,u.inPlace(XMLHttpRequest.prototype,["open","send"],"-xhr-",o),a.on("send-xhr-start",r),a.on("open-xhr-start",r)},{1:5,2:22,ee:"QJf3ax"}],9:[function(t){function e(t){var e=this.params,r=this.metrics;if(!this.ended){this.ended=!0;for(var i=0;c>i;i++)t.removeEventListener(s[i],this.listener,!1);if(!e.aborted){if(r.duration=(new Date).getTime()-this.startTime,4===t.readyState){e.status=t.status;var a=t.responseType,u="arraybuffer"===a||"blob"===a||"json"===a?t.response:t.responseText,f=n(u);if(f&&(r.rxSize=f),this.sameOrigin){var d=t.getResponseHeader("X-NewRelic-App-Data");d&&(e.cat=d.split(", ").pop())}}else e.status=0;r.cbTime=this.cbTime,o("xhr",[e,r,this.startTime])}}}function n(t){if("string"==typeof t&&t.length)return t.length;if("object"!=typeof t)return void 0;if("undefined"!=typeof ArrayBuffer&&t instanceof ArrayBuffer&&t.byteLength)return t.byteLength;if("undefined"!=typeof Blob&&t instanceof Blob&&t.size)return t.size;if("undefined"!=typeof FormData&&t instanceof FormData)return void 0;try{return JSON.stringify(t).length}catch(e){return void 0}}function r(t,e){var n=i(e),r=t.params;r.host=n.hostname+":"+n.port,r.pathname=n.pathname,t.sameOrigin=n.sameOrigin}if(window.XMLHttpRequest&&XMLHttpRequest.prototype&&XMLHttpRequest.prototype.addEventListener&&!/CriOS/.test(navigator.userAgent)){t("loader").features.xhr=!0;var o=t("handle"),i=t(2),a=t("ee"),s=["load","error","abort","timeout"],c=s.length,u=t(1);t(4),t(3),a.on("new-xhr",function(){this.totalCbs=0,this.called=0,this.cbTime=0,this.end=e,this.ended=!1,this.xhrGuids={}}),a.on("open-xhr-start",function(t){this.params={method:t[0]},r(this,t[1]),this.metrics={}}),a.on("open-xhr-end",function(t,e){"loader_config"in NREUM&&"xpid"in NREUM.loader_config&&this.sameOrigin&&e.setRequestHeader("X-NewRelic-ID",NREUM.loader_config.xpid)}),a.on("send-xhr-start",function(t,e){var r=this.metrics,o=t[0],i=this;if(r&&o){var u=n(o);u&&(r.txSize=u)}this.startTime=(new Date).getTime(),this.listener=function(t){try{"abort"===t.type&&(i.params.aborted=!0),("load"!==t.type||i.called===i.totalCbs&&(i.onloadCalled||"function"!=typeof e.onload))&&i.end(e)}catch(n){try{a.emit("internal-error",[n])}catch(r){}}};for(var f=0;c>f;f++)e.addEventListener(s[f],this.listener,!1)}),a.on("xhr-cb-time",function(t,e,n){this.cbTime+=t,e?this.onloadCalled=!0:this.called+=1,this.called!==this.totalCbs||!this.onloadCalled&&"function"==typeof n.onload||this.end(n)}),a.on("xhr-load-added",function(t,e){var n=""+u(t)+!!e;this.xhrGuids&&!this.xhrGuids[n]&&(this.xhrGuids[n]=!0,this.totalCbs+=1)}),a.on("xhr-load-removed",function(t,e){var n=""+u(t)+!!e;this.xhrGuids&&this.xhrGuids[n]&&(delete this.xhrGuids[n],this.totalCbs-=1)}),a.on("addEventListener-end",function(t,e){e instanceof XMLHttpRequest&&"load"===t[0]&&a.emit("xhr-load-added",[t[1],t[2]],e)}),a.on("removeEventListener-end",function(t,e){e instanceof XMLHttpRequest&&"load"===t[0]&&a.emit("xhr-load-removed",[t[1],t[2]],e)}),a.on("fn-start",function(t,e,n){e instanceof XMLHttpRequest&&("onload"===n&&(this.onload=!0),("load"===(t[0]&&t[0].type)||this.onload)&&(this.xhrCbStart=(new Date).getTime()))}),a.on("fn-end",function(t,e){this.xhrCbStart&&a.emit("xhr-cb-time",[(new Date).getTime()-this.xhrCbStart,this.onload,e],e)})}},{1:"XL7HBI",2:10,3:8,4:5,ee:"QJf3ax",handle:"D5DuLP",loader:"G9z0Bl"}],10:[function(t,e){e.exports=function(t){var e=document.createElement("a"),n=window.location,r={};e.href=t,r.port=e.port;var o=e.href.split("://");return!r.port&&o[1]&&(r.port=o[1].split("/")[0].split("@").pop().split(":")[1]),r.port&&"0"!==r.port||(r.port="https"===o[0]?"443":"80"),r.hostname=e.hostname||n.hostname,r.pathname=e.pathname,r.protocol=o[0],"/"!==r.pathname.charAt(0)&&(r.pathname="/"+r.pathname),r.sameOrigin=!e.hostname||e.hostname===document.domain&&e.port===n.port&&e.protocol===n.protocol,r}},{}],11:[function(t,e){function n(t){return function(){r(t,[(new Date).getTime()].concat(i(arguments)))}}var r=t("handle"),o=t(1),i=t(2);"undefined"==typeof window.newrelic&&(newrelic=window.NREUM);var a=["setPageViewName","addPageAction","setCustomAttribute","finished","addToTrace","inlineHit","noticeError"];o(a,function(t,e){window.NREUM[e]=n("api-"+e)}),e.exports=window.NREUM},{1:20,2:21,handle:"D5DuLP"}],"7eSDFh":[function(t,e){function n(t,e,n){if(r.call(t,e))return t[e];var o=n();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(t,e,{value:o,writable:!0,enumerable:!1}),o}catch(i){}return t[e]=o,o}var r=Object.prototype.hasOwnProperty;e.exports=n},{}],gos:[function(t,e){e.exports=t("7eSDFh")},{}],handle:[function(t,e){e.exports=t("D5DuLP")},{}],D5DuLP:[function(t,e){function n(t,e,n){return r.listeners(t).length?r.emit(t,e,n):(o[t]||(o[t]=[]),void o[t].push(e))}var r=t("ee").create(),o={};e.exports=n,n.ee=r,r.q=o},{ee:"QJf3ax"}],id:[function(t,e){e.exports=t("XL7HBI")},{}],XL7HBI:[function(t,e){function n(t){var e=typeof t;return!t||"object"!==e&&"function"!==e?-1:t===window?0:i(t,o,function(){return r++})}var r=1,o="nr@id",i=t("gos");e.exports=n},{gos:"7eSDFh"}],G9z0Bl:[function(t,e){function n(){var t=p.info=NREUM.info,e=u.getElementsByTagName("script")[0];if(t&&t.licenseKey&&t.applicationID&&e){s(d,function(e,n){e in t||(t[e]=n)});var n="https"===f.split(":")[0]||t.sslForHttp;p.proto=n?"https://":"http://",a("mark",["onload",i()]);var r=u.createElement("script");r.src=p.proto+t.agent,e.parentNode.insertBefore(r,e)}}function r(){"complete"===u.readyState&&o()}function o(){a("mark",["domContent",i()])}function i(){return(new Date).getTime()}var a=t("handle"),s=t(1),c=(t(2),window),u=c.document,f=(""+location).split("?")[0],d={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",agent:"js-agent.newrelic.com/nr-632.min.js"},p=e.exports={offset:i(),origin:f,features:{}};u.addEventListener?(u.addEventListener("DOMContentLoaded",o,!1),c.addEventListener("load",n,!1)):(u.attachEvent("onreadystatechange",r),c.attachEvent("onload",n)),a("mark",["firstbyte",i()])},{1:20,2:11,handle:"D5DuLP"}],loader:[function(t,e){e.exports=t("G9z0Bl")},{}],20:[function(t,e){function n(t,e){var n=[],o="",i=0;for(o in t)r.call(t,o)&&(n[i]=e(o,t[o]),i+=1);return n}var r=Object.prototype.hasOwnProperty;e.exports=n},{}],21:[function(t,e){function n(t,e,n){e||(e=0),"undefined"==typeof n&&(n=t?t.length:0);for(var r=-1,o=n-e||0,i=Array(0>o?0:o);++r<o;)i[r]=t[e+r];return i}e.exports=n},{}],22:[function(t,e){function n(t){return!(t&&"function"==typeof t&&t.apply&&!t[i])}var r=t("ee"),o=t(1),i="nr@wrapper",a=Object.prototype.hasOwnProperty;e.exports=function(t){function e(t,e,r,a){function nrWrapper(){var n,i,s,u;try{i=this,n=o(arguments),s=r&&r(n,i)||{}}catch(d){f([d,"",[n,i,a],s])}c(e+"start",[n,i,a],s);try{return u=t.apply(i,n)}catch(p){throw c(e+"err",[n,i,p],s),p}finally{c(e+"end",[n,i,u],s)}}return n(t)?t:(e||(e=""),nrWrapper[i]=!0,u(t,nrWrapper),nrWrapper)}function s(t,r,o,i){o||(o="");var a,s,c,u="-"===o.charAt(0);for(c=0;c<r.length;c++)s=r[c],a=t[s],n(a)||(t[s]=e(a,u?s+o:o,i,s))}function c(e,n,r){try{t.emit(e,n,r)}catch(o){f([o,e,n,r])}}function u(t,e){if(Object.defineProperty&&Object.keys)try{var n=Object.keys(t);return n.forEach(function(n){Object.defineProperty(e,n,{get:function(){return t[n]},set:function(e){return t[n]=e,e}})}),e}catch(r){f([r])}for(var o in t)a.call(t,o)&&(e[o]=t[o]);return e}function f(e){try{t.emit("internal-error",e)}catch(n){}}return t||(t=r),e.inPlace=s,e.flag=i,e}},{1:21,ee:"QJf3ax"}]},{},["G9z0Bl",4,9]);</script>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>KnpUniversity - PHP and Symfony Video Tutorial Screencasts</title>
<link href="/css/layout-166e93df.css" rel="stylesheet">
<link href='//fonts.googleapis.com/css?family=Rokkitt' rel='stylesheet' type='text/css'>
<link href='//fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>
<link href='//fonts.googleapis.com/css?family=Cedarville+Cursive' rel='stylesheet' type='text/css'>
<!-- JS -->
<script type="text/javascript" src="/js/packed/main.js?v=2"></script>
<script src="/js/routing?callback=fos.Router.setData"></script>
<link rel="alternate" type="application/rss+xml" title="Blog feed with technical articles around PHP and screencast and tutorial updates from KnpUniversity.com" href="http://feeds.feedburner.com/knpuniversity" />
<meta name="description" content="PHP and Symfony Tutorial Screencasts - with free videos, scripts, and code downloads!">
<meta property="og:site_name" content="KnpUniversity - PHP and Symfony Video Tutorial Screencasts">
<meta name="twitter:site" content="@KnpUniversity"><link rel="shortcut icon" href="/assets/images/favicon.ico">
<link rel="icon" type="image/png" href="/assets/images/favicon.png">
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<meta property="og:image" content="http://knpuniversity.com/bundles/knpuniversity/img/logo-knpuniversity.png"/>
</head>
<body data-user-id="5" >
<nav class="navbar navbar-inverse nav-margin">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle toggle-button collapsed" data-toggle="collapse" data-target="#js-navbar" aria-expanded="false" aria-controls="js-navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a href="/" class="navbar-brand">
<span class="knp-color-blue">Knp</span>
<span class="knp-color-white">University</span>
</a>
</div>
<form class="navbar-form navbar-left navbar-form-border" role="search" method="GET" action="/search">
<div class="input-group">
<input type="text" class="form-control" placeholder="Search Tutorials" value="" name="q">
<div class="input-group-btn">
<button class="btn btn-default" type="submit">
<i class="fa fa-search"></i>
</button>
</div>
</div>
</form>
<div id="js-navbar" class="collapse-fix collapse navbar-right navbar-collapse">
<ul class="nav navbar-nav nav-narrowerOnSmall">
<li><a href="/tracks">Tutorials</a></li>
<li><a href="/pricing">Pricing</a></li>
<li><a href="/training">Training</a></li>
<li><a href="/blog">Blog</a></li>
<li class="visible-xs"><a href="/admin/">Admin</a></li>
<li class="visible-xs"><a href="/profile">My Profile</a></li>
<li class="visible-xs"><a href="/logout">Sign Out</a></li>
<li class="dropdown hidden-xs">
<a class="gravatar-drpdwn dropdown-toggle" data-toggle="dropdown" href="#" title="Account Menu">
<img src="https://secure.gravatar.com/avatar/f1b358e0786aea1a2e77cc39b3826b71?s=100&d=https%3A%2F%2Fknpuniversity.com%2Fassets%2Fimages%2Favatars%2Fedgar.png" class="img-gravatar img-circle"> <span class="caret"></span>
</a>
<ul class="list-unstyled dropdown-menu gray-menu" role="menu">
<li class=""><a href="/admin/">Admin</a></li>
<li class=""><a href="/profile">My Profile</a></li>
<li class=""><a href="/logout">Sign Out</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<div class="hero-image">
<div class="cover"><h1 class="knp-color-white tuts-header-font-homepage text-center">Simply the Best PHP <br> & Symfony Tutorials</h1></div>
</div>
<div class="container">
<div class="track-section home-track">
<div class="row">
<div class="text-center track-section-cta">
<a href="/pricing" class="btn btn-lg btn-warning btn-cta">Start my Subscription</a>
</div>
<div class="col-sm-12 col-md-4">
<a href="/tracks/symfony">
<div class="tut-container" style="background-image: url('/assets/images/learn-sf.png')">
<p class="tut-title">Learn Symfony</p>
</div>
</a>
</div>
<div class="col-sm-12 col-md-4">
<a href="/tracks/drupal">
<div class="tut-container" style="background-image: url('/assets/images/drupal-track.png')">
<p class="tut-title">Learn Drupal 8</p>
</div>
</a>
</div>
<div class="col-sm-12 col-md-4">
<a href="/tracks/rest">
<div class="tut-container" style="background-image: url('/assets/images/learn-rest.png')">
<p class="tut-title">Learn REST</p>
</div>
</a>
</div>
<div class="col-sm-12 col-md-4">
<a href="/tracks/oo">
<div class="tut-container" style="background-image: url('/assets/images/learn-oo.png')">
<p class="tut-title">Learn OO</p>
</div>
</a>
</div>
<div class="col-sm-12 col-md-4">
<a href="/tracks/php">
<div class="tut-container" style="background-image: url('/assets/images/learn-php.png')">
<p class="tut-title">Learn PHP</p>
</div>
</a>
</div>
<div class="col-sm-12 col-md-4">
<a href="/tracks/extras">
<div class="tut-container" style="background-image: url('/assets/images/extras.png')">
<p class="tut-title">Extras</p>
</div>
</a>
</div>
</div>
</div>
</div>
<!--
<div class="col-xs-12 track-section ryan-intro-img">
<div class="col-xs-6 col-xs-offset-6">
<p>
<span class="hello-intro">Hi there, I'm Ryan!</span> Main writer for KnpUniversity,
lead of the <a href="http://symfony.com/doc/current/index.html">Symfony Documentation</a>
and frequent conference speaker. I <strong>love</strong>
teaching, but I <strong>hate</strong> slides.
</p>
<p>
That's why KnpU exists: <strong>watch</strong> videos where we solve real problems and <strong>code</strong> online with the
challenges. It's like an in-person training wherever and whenever you need it.
</p>
</div>
</div>
-->
<div class="col-xs-12 track-section home-authors">
<h3 class="knp-color-white text-center info-text"><i class="fa fa-certificate"></i> Trusted by devs like you</h3>
<h3 class="knp-color-white text-center info-text"><i class="fa fa-users"></i> PHP and Symfony tutorials written by the experts</h3>
<h3 class="knp-color-white text-center info-text"><i class="fa fa-file-code-o"></i> Code downloads for each tutorial</h3>
</div>
<div class="container">
<div class="row">
<h2 class="text-center testimonial-header-homepage">Testimonials</h2>
<div class="col-xs-4">
<img class="img-circle center-block testimonial-pic testimonial-pic-margin" src="/assets/images/avatars/chris-simpson.jpg" />
<p class="text-center">“Fantastic. A well thought-out screencast. A decent level of detail, without been overwhelming.” <br> <strong>--Chris Simpson</strong></p>
</div>
<div class="col-xs-4">
<img class="img-circle center-block testimonial-pic testimonial-pic-margin" src="/assets/images/avatars/phillip-rieber.jpeg" />
<p class="text-center">“Thanks for this great screencast! A very good refresh of all the basics spiced with the revealment of some Symfony2 'secrets'. Can't wait to watch the sequels with more advanced topics!” <br> <strong>--Phillip Rieber</strong></p>
</div>
<div class="col-xs-4">
<img class="img-circle center-block testimonial-pic testimonial-pic-margin" src="/assets/images/avatars/kurt-krueckeberg.jpeg" />
<p class="text-center">“These videos are extremely helpful and well worth every cent.” <br> <strong>--Kurt Krueckeberg</strong></p>
</div>
</div>
<div class="row">
<div class="col-xs-12">
<p class="text-center sub-link-testimonial" > Not sure? <a href="/testimonials">Read some more testimonials!</a></p>
</div>
</div>
</div>
<footer class="footer footer-styling">
<div class="container">
<div class="row">
<div class="col-xs-7 col-sm-4">
<div class="row">
<div class="col-xs-6">
<ul class="list-unstyled footer-link">
<li><a class="knp-color-black" href="/courses/all">All Tutorials</a></li>
<li><a class="knp-color-black" href="/pricing">Pricing</a></li>
<li><a class="knp-color-black" href="/faq">FAQ</a></li>
<li><a class="knp-color-black" href="/training">Training</a></li>
</ul>
</div>
<div class="col-xs-6">
<ul class="list-unstyled footer-link">
<li><a class="knp-color-black" href="/about">About</a></li>
<li><a class="knp-color-black" href="/contact">Contact Us</a></li>
<li><a class="knp-color-black" href="/terms">Terms</a></li>
</ul>
</div>
</div>
</div>
<div class="hidden-xs col-sm-4">
<p class="disclaimer">Symfony is a registered trademark of Fabien Potencier in the United States and/or other countries.
This product is not endorsed or sponsored by Fabien Potencier.
</p>
</div>
<div class="col-xs-5 col-sm-4">
<div class="social-icons">
<a class="btn btn-social-icon btn-twitter" href="http://twitter.com/KnpUniversity">
<i class="fa fa-twitter"></i>
</a>
<a class="btn btn-social-icon btn-facebook" href="http://facebook.com/Knplabs">
<i class="fa fa-facebook"></i>
</a>
<a class="btn btn-social-icon btn-github" href="http://github.com/knpuniversity">
<i class="fa fa-github"></i>
</a>
</div>
</div>
</div>
</div>
</footer>
</html>