Lecture
1. LARAVEL PHP FRAMEWORK FOR WEB ARTISANS
2. Taylor Otwell Creator of Laravel www.taylorotwell.com @taylorotwell http://taylorotwell.com/on-community/
3. http://www.github.com/laravel/laravel V 4.2.X Current Release
4. Google Trends from 2004 to current
5.
6. Easy to Learn
7. Ready For Tomorrow
8. Great Community
9. Composer Powered www.getcomposer.org Dependency Manager for PHP
10. Eloquent ORM
11. Easy for TDD FAIL PASS REFACTOR
12. INSTALLATION It's not easy to tell you.
13. IoC Inverse of Control IlluminateContainerContainer
14. Re-usable "Removing dependency from the code ”
15. Simplifying Dependency Injection $ object = new SomeClass ($ dependency1, $ dependency2); $ object = App :: make ('SomeClass');
16. Hard-coded source dependency public function sendEmail () {$ mailer = new Mailer; $ mailer-> send (); } public function sendEmail () {$ mailer = App :: make ('Mailer'); $ mailer-> send (); } IoC Resolution
17. Telling IoC what we need $ Bar = App :: make ('Bar'); // new Bar; App :: bind ('Bar', 'MockBar'); $ Bar = App :: make ('Bar'); // new MockBar;
18. App: bind ('SomeClass', function () {return new Foo;}); $ fooObject = new Foo; $ object = App :: bind ('SomeClass', $ fooObject); App :: bind ('SomeClass', 'Foo');
19. Singleton Dependencies $ object = App :: singleton ('CurrentUser', function () {$ auth = App :: make ('Auth'); return $ auth-> user (); // returns user object});
20. Automatic Dependency Resolution class EmailService {public function __construct (Mailer $ mailer) {$ this-> mailer = $ mailer; } public function sendEmail () {$ this-> mailer-> send (); }} $ EmailService = App :: make ('EmailService');
21. Service Providers
22. Service Providers use IlluminateSupportServiceProvider; class ContentServiceProvider extends ServiceProvider {public function register () {$ this-> app-> bind ('PostInterface', 'MyNameSpacePost'); }} App :: register ('ContentServiceProvider'); // Registering at Runtime
23. Laravel Facades Illuminate / Support / Facades / Facade
24. What is the Facade In Laravel? Hide interface interface behind a simple one.
25. What is happening? Illuminate / Support / Facades / Route Route :: get ('/', 'HomeController @ getIndex'); $ app-> make ('router') -> get ('/', 'HomeController @ getIndex'); Illuminate / Routing / Router
26. Hourly Lighthouses / Hurricanes / Hourly / Hourly / Hurricanes / Appays / Lighthouses / Hopers / Hours / Lens / Hills / Lens / Hills / Lens / Hills / Cards / Hatch / Hatch / Hatch / Hatch / Hatch / Hatch / Hatch / Hatch / Hatch / L / H / H / L / H / H / H / E / C
27. Eloquent Talking to your data IlluminateDatabaseEloquentModel
28. $ result = mysql_query (“SELECT * FROM` users` ”); How to query in plain PHP 5.4 or less (deprecated) $ mysqli = new mysqli (“localhost”, “user”, ”password”, ”database”); $ result = $ mysqli-> query (“SELECT * FROM` users` “); How you query in plain PHP 5.5 or above User :: all (); In Laravel 4, does the same query
29. User :: all (); DB :: table ('users') -> get (); IlluminateDatabaseQueryBuilder What happens when you use Eloquent ORM
30. Create, Read, Update, Delete Post :: create ($ data); Post :: find ($ id); Post :: find ($ id) -> update ($ data); Post :: delete ($ id);
31. Eloquent {public function comments () {return $ this-> hasMany ('Comment'); } public function author () {return $ this-> belongsTo ('User'); } public function scopePublished ($ q) {return $ q-> where ('publish', '=', 1); }}
32. Eloquent {public function comments () {return $ this-> hasMany ('Comment'); } public function author () {return $ this-> belongsTo ('User'); } public function scopePublished ($ q) {return $ q-> where ('publish', '=', 1); }}
33. $ post = Post :: find ($ id); $ author = post-> author; // get the author's object $ posts = Post :: with ('author') -> get (); Get Posts including Authors
34. Get Post Comments Approved $ post = Post :: find ($ id); $ comments = $ post-> comments () -> where ('approved', true) -> get ();
35. Model with Query Scope $ published_posts = Post :: published () -> get (); // gets all posts published $ published_posts = Post :: where ('publish', '=', true) -> get (); // gets all posts published
36. Query Scope Example class Post extends Eloquent {public function comments () {return $ this-> hasMany ('Comment'); } public function author () {return $ this-> belongsTo ('User'); } public function scopePublished ($ q) {return $ q-> where ('publish', '=', 1); }}
37. Eloquent Relations
38. Eloquent Relationship One to One (hasOne) class User $ this-> hasOne ('Profile', 'user_id'); function Profile () Users pK: id username email Profile pk: id fK: user_id url
39. class Post $ this-> hasMany ('Comment'); function comments () Posts pK: id title user_id Comments pk: id fK: post_id user_id Eloquent Relationship One to Many (hasMany)
40. class User $ this-> belongsToMany ('Group'); function groups () Users pK: id username email Groups pk: id Name Group_User user_id group_id Eloquent Relationship Many to Many (belongsToMany)
41. class Country $ this-> hasManyThrough ('User'); function posts () Countries pK: id id code code Posts pk: id user_id title body Users pk: id country_id username email Eloquent Relationship One to Many through (hasManyThrough)
42. Eloquent Relationship Polymorphic Association $ user-> image; $ movie-> image; class Movie $ this-> morphMany ('Photo', 'imageable); function image () Profile pK: id user_id preferences Photos pk: id file_path imageable_id imageable_type Movie pk: id id released released Photo $ this-> morphTo (); function imageable () class Profile $ this-> morphMany ('Photo', 'imageable); function image ()
43. Polymorphic Association $ movie-> tags; $ post-> tags; Posts pK: id title body Taggables tag_id taggable_id taggable_type Movie pK: id title released released class Movie $ this-> morphToMany ('Tag', 'Taggable'); function tags () Tags pk: id name class Post $ this-> morphToMany ('Tag', 'Taggable'); function tags () class Tag $ this-> morphedByMany ('Post', 'Taggable'); function posts () $ this-> morphedByMany ('Movie', 'Taggable'); function movies ()
44. Underneath Eloquent Model Query Builder DB :: table ('users') -> get (); DB :: table ('users') -> where ('email', 'raftalks@gmail.com') -> first (); DB :: table ('users') -> where ('votes', '>', 100) -> orWhere ('votebox', 'A') -> get (); IlluminateDatabaseQueryBuilder
45. DB Query :: table ('users') -> join (' contacts', function ($ join) {$ join-> on ('users.id', '=', 'contacts.user_id ') -> whereNotNull (' contacts.mobile_number ');}) -> leftJoin (' submissions', 'users.id', '=', 'submissions.user_id') -> whereExists (function ($ query) {$ query-> select (DB :: raw (1)) -> from ('reviews') -> whereRaw (' reviews.user_id = users.id ');}) -> whereYear (' users.joined_date ','> ', 2010) -> get (); Received all joined in 2010. Only select users with their contacts.
46. Find out remaining 70% of Eloquent Features from the documentation
47. Routing Wolf
48. Multiple Routing Paradigms 1. route to closures 2. route to controller actions 3. route to RESTful controllers 4. route to resource
49. Routing to Closure Route :: get ('techtalks', function () {return “
50. Route Groups and Filters Route :: group (['prefix' => 'settings', 'before' => 'auth'], function () {Route :: get ('users', function () {// get a post by id});}); Route :: filter ('auth', function () {if (Auth :: guest ()) return Redirect :: guest ('login');});
51. Subdomain Routing // Registering sub-domain routes Route :: group (['domain' => '{account} .fihaara.com'], function () {Route :: get ('/', function ($ account ) {return “welcome to“. $ account;})}};
52. Routing to a Controller Action class HomePageController extends BaseController {public function home () {return “welcome to home page”; }} Route :: get ('/', 'HomePageController @ home');
53. class TechTalksController extends Controller {public function getIndex () {} / talks public function getTalkerProfile ($ id) {} / talks / talker-profile / 1 public function getTalk ($ id) {} / talks / talk / 1 public function postTalk () {} / talks / talk public function putTalk () {} / talks / talk public function deleteTalk ($ id) {} / talks / talk / 1} Routing to RESTful Controller Route :: controller ('talks',' TechTalksController '); Public method must be prefixed with an HTTP verb
54. class PostsController extends Controller {public function index () {} // posts GET public function create () {} // posts / create GET public function store () {} // posts POST public function show ($ id) { } // posts / {id} GET public function edit ($ id) {} // posts / {id} / edit GET public function update () {} // posts / {id} PUT public function destroy () {} // posts / {id} DELETE ... Routing to Resource Controller Route :: resource ('posts', 'PostsController');
55. Other Cool Features
56. Authentication $ credentials = ['username' => 'raftalks', 'password' => 'secret']; if (Auth :: attempt ($ credentals) === false) {return Redirect :: to ('login-error'); } if (Auth :: check () === false) {return Redirect :: to ('login'); } Check if user is authenticated
57. Localization App :: setLocale ('dv'); echo Lang :: get ('news.world_news'); // out puts “ނި ޔޭ ގެ ޚަ ބަ ރު” echo Trans ('news.world_news'); Basic Usage return array (“world_news” => “ނި ޔޭ ގެ ޚަ ބަ ރު”, “news” => “ ަ ބަ ރު ”, ... Lang File FILE PATH: / app / lang / dv news.php
58. Artisan CLI
59. Creating DB Migration php artisan migrate: make create_users_table - create = users class Create_Users_table extends Migration {public function up () {Schema :: create ('users', function (Blueprint $ table) {$ table-> increments (' id '); $ table-> string (' username ', 50); $ table-> string (' password ', 200);}); }, public function down () {Schema :: drop ('users'); }}
60. Seeding into your DB class DefaultAdminUserSeeder extends Seeder {public function run () {DB :: table ('users') -> delete (); // truncates the table data User :: create (['username' => 'admin', 'password' => Hash :: make ('password')]); }}
61. Events Event :: fire ('news.created', $ post); Event :: listen ('news.created', function ($ post) {UserPostCounter :: increment ('posts', $ post-> user_id);});
62. Mail Mail :: send ('emails.welcome', $ data, function ($ message) use ($ user) {$ message-> to ($ user-> email, $ user-> name) -> subject ( 'Welcome');}); API drivers for Mailgun or Mandrill
63. Queues Beanstalkd Amazon SQS IronMQ Redis Synchronous (for lcoal use) Queue :: push ('SendEmail', ['message' => $ message]); php artisan queue: listen
64. Remote SSH SSH :: run (['cd / var / www', 'git pull origin master']);
65. Laravel Homestead ng Vagrant, Included Softwares • Ubuntu 14.04 • PHP 5.5 • Nginx • MySQL • Postgres • Node (with Bower, Grunt, Gulp) • Redis • Memcached • Beanstalkd • Laravel Envoy • Fabric + HipChat Extension
66. Sign Up -> Add Your Cloud's API Key -> Serve Happiness forge.laravel.com
67. Meet the community @ IRC Channel: #laravel Server: irc.freenode.net Port: 6667
68. Next Laracon laracon.eu/2014
69. Laravel Maldives Group If you are interested. My Emails: 7909000@gmail.com/raftalks@gmail.com
70. ???
71. Sleep Well :)
Comments
To leave a comment
Famworks
Terms: Famworks