ebook img

Laravel 4 Cookbook PDF

396 Pages·2014·1.544 MB·English
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Laravel 4 Cookbook

Laravel 4 Cookbook ThisisaLeanpubbook.LeanpubempowersauthorsandpublisherswiththeLeanPublishing process.LeanPublishingistheactofpublishinganin-progressebookusinglightweighttoolsand manyiterationstogetreaderfeedback,pivotuntilyouhavetherightbookandbuildtractiononce youdo. ©2013-2014ChristopherPitt Tweet This Book! Please help Christopher Pitt and Taylor Otwell by spreading the word about this book on Twitter!The suggested hashtag for this book Findoutwhatotherpeoplearesayingaboutthebookbyclickingonthislinktosearchforthis hashtagonTwitter: Contents Dedication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i Forward . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii WhatThisBookTeaches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iii WhyWriteThisBook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iv InstallingLaravel4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v Authentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 InstallingLaravel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 ConfiguringTheDatabase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 ConnectionToTheDatabase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 DatabaseDriver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 EloquentDriver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 CreatingAMigration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 CreatingAModel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 CreatingASeeder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 ConfiguringAuthentication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 LoggingIn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 CreatingALayoutView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 CreatingALoginView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 CreatingALoginAction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 AuthenticatingUsers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 RedirectingWithInput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 AuthenticatingCredentials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 ResettingPasswords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 CreatingAPasswordResetView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 CreatingAPasswordResetAction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 CreatingFilters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 CreatingALogoutAction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 AccessControlList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 ManagingGroups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 CONTENTS RefactoringMigrations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 ListingGroups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 AddingGroups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 EditingGroups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 DeletingGroups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 AddingUsersAndResources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 AddingMigrations,ModelsAndRelationships . . . . . . . . . . . . . . . . . . . . . . 56 AddingViews . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 SeedingResources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 SavingRelationships . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 AdvancedRoutes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Deployment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 EnvironmentCommands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 CheckingEnvironments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 SettingEnvironments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 UnsettingEnvironments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 AssetCommands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 CombiningAssets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 MinifyingAssets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 BuildingAssets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 WatchingAssets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 ResourceWatcherIntegrationBug . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Rsync . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 DistributeCommand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 CopyingFilesForDistribution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 RemovingDevelopmentFiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 SynchronisingFilesToARemoteServer . . . . . . . . . . . . . . . . . . . . . . . . . 109 CommandPortability . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Preprocessors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 CreatingResourcesWithArtisan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 CreatingResourcesWithGenerators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 GeneratingMigrations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 GeneratingSeeders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 GeneratingModels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 GeneratingControllers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 BindingModelsToRoutes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 TroubleshootingAliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 CONTENTS TestingEndpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 AuthenticatingRequests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 UsingAccessorsAndMutators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 UsingCache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 Composer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 DependencyInjection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 InversionOfControl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 ServiceProviders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 OrganisingCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 PublishingConfigurationFiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 CreatingComposer.json. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 SubmittingAPackageToPackagist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 NoteOnTesting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 RealTimeChat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 Dependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 Bootstrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 EmberJS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 Ratchet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 ReactPHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Ratchet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 CreatingAnInterface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 CreatingAView . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 CreatingAnEmberJSApp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 CreatingAServiceProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 CreatingAChatHandler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 CreatingASocketWrapper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 CreatingAServeCommand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 ConnectingToTheSocketServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 WiringUpTheInterface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 ShowingChatMessages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 SendingChatMessages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 FinishingUpTheTemplate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 NoteOnNginx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Multisites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 NoteonOperatingSystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 NoteonServerSetup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 NoteonDutch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 VirtualHosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 AddingVirtualHostEntries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 CONTENTS CreatingApache2VirtualHosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 CreatingNginxVirtualHosts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 Environments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 NoteonRunningCommandsinLocalEnvironment . . . . . . . . . . . . . . . . . . . 206 UsingSite-SpecificViews . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 UsingSite-SpecificRoutes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Translation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 UsingLanguageLookups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 UsingLanguageLookupsinPackages . . . . . . . . . . . . . . . . . . . . . . . . . . 215 CachingLanguageLookups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 CreatingMulti-LanguageRoutes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 CreatingMulti-LanguageContent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 E-Commerce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 NoteonSanity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 GettingStarted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 InstallingLaravel4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 InstallingOtherDependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 AngularJS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Bootstrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 DOMPDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 Stripe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Faker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 CreatingDatabaseObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 CreatingMigrations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 CreatingModels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 CreatingSeeders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 CreatingAPIEndpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 ManagingCategoriesAndProducts . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 ManagingAccounts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 ManagingOrders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 CreatingTheSiteWithAngularJS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 CreatingTheInterface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 MakingTheInterfaceDynamic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 CompletingOrders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 AcceptingPayments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 CreatingOrders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 WorkingTheServiceProvider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 MakingPayments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 GeneratingPDFDocuments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 EmbeddedSystems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 GatheringParts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 CONTENTS InstallingDependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 NoteAboutErrata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 CreatingAnInterface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294 CreatingASocketServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 ConnectionToArduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 SpinningUp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 AddingAWebcam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 InstallingImageSnapOnOSX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 InstallingStreamerOnUbuntu/Debian . . . . . . . . . . . . . . . . . . . . . . . . . . 310 DisplayingPhotosInTheInterface . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 File-BasedCMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 InstallingDependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 RenderingTemplates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 GatheringMetadata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 CreatingLayouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 CreatingPages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 DisplayingContent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 ExtendingTheCMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 ControllerTesting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 InstallingDependencies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 Unitvs.Functionalvs.Acceptance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 UnitTests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 FunctionalTests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 AcceptanceTests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 AmIWritingUnitOrFunctionalTests? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 FatControllers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 ServiceProviders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 DependencyInjection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 ThisIsn’tTesting! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 TheRabbitHole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 Alternatives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 Dedication I would like to thank Taylor Otwell for the Laravel framework. He may not have written part of thisbook(inthetraditionalsense),butwithouthistirelessdedicationtoLaravel;noneofthiswould havehappened.Iconsiderhimaco-developerinthecodeIwritedaily. I would like to thank all of my friends as Joe Publicⁿ. I have never worked anywhere I love more. Yougivemethefreedomandencouragementtocreate,learnandhavefun. Iwouldliketothankmyfamilyfortheirencouragement,supportandgeneralawesomeness. I would like to thank my wife and children for being patient and loving me even when I’m not loveable. IwouldliketothankJesus.Iencourageyoutoaskmewhy. Forward Hi, my name is Wayne Ashley Berry and I work with Chris at Joe Public where we write business critical software day in and day out. I’ve been writing software professionally for years… Chris is theguyIgotowhenGoogledoesn’thavetheanswers. WhatIloveaboutChris’sworkethicisthathecontinuallypushesthelimitsofsoftware,frameworks andlanguagesbutthenmanagestoholdbackandusesimpleandunderstandableconcepts. B.B.Kingoncesaid“Don’tusethesongtoshowoffyourskills,useyourskillstoshowoffthesong.”, ChrisislikethatJazzmusicianwhoyouknowcouldout-playyouwithonehandbutfindsimmense joyinplayingfourchordpoptracks. Each case study in this book comes from hard earned experience. Consider each chapter years of experience, sleepless nights and stressful deadlines distilled into a set of best practices, common senseandgoodadvice. If you’re looking to use Laravel, or even just PHP, for real-world projects then consider this book worthmorethatitsfile-sizeingold.

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.