{"id":7925,"date":"2023-10-19T12:50:35","date_gmt":"2023-10-19T07:20:35","guid":{"rendered":"https:\/\/innovationm.co\/?p=7925"},"modified":"2023-10-19T12:50:35","modified_gmt":"2023-10-19T07:20:35","slug":"9-laravel-best-practices","status":"publish","type":"post","link":"https:\/\/www.innovationm.com\/blog\/9-laravel-best-practices\/","title":{"rendered":"9 Laravel Best Practices for Building Better Websites"},"content":{"rendered":"<ol>\n<li><strong>Always Use the Latest Version<\/strong><\/li>\n<\/ol>\n<p>Laravel becomes more secure and faster with each upgrade. By using the latest Laravel version, you can build more functional and secure websites. For example, Laravel 9.x, the newest release of Laravel released in February 2022, offers the following features:<\/p>\n<p>Anonymous class migrations are the default behavior, so multiple migrations with the same class name will no longer create problems when trying to recreate the database from the beginning<\/p>\n<p>A refreshed ignition error page is included as a default. A new query builder interface for type hinting, refactoring, and static analysis is included and is quite helpful for developers.\u00a0The route list design has been overhauled for improved ease of use and functionality. That\u2019s why it\u2019s best to upgrade to the latest Laravel version. If you haven\u2019t done it yet, now is the time!<\/p>\n<p>2.<strong> Use Helper Functions<\/strong><\/p>\n<p>Some developers try to reinvent the wheel by creating their PHP helpers. It is an ambitious practice, but unsafe and potentially task-heavy. An alternative is to use the helper methods provided in Illuminate\/Support\/Str. They are easy, and you can call them anywhere.<\/p>\n<p>Ex:-<\/p>\n<pre>\u00a0\u00a0 public function newId()\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 ....\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 $id = Str::random(24);\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 ....\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/pre>\n<ol start=\"3\">\n<li><strong>Follow the Single Responsibility Principle<\/strong><\/li>\n<\/ol>\n<p>The single responsibility principle ensures that a class and method have only one responsibility at a time. This principle makes software implementation easy and ensures no conflict happens during changes in the future. Here\u2019s an example of how to follow the single responsibility principle in your code:<\/p>\n<pre>\u00a0\u00a0 public function getTransactionAttribute(): bool\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 return $this-&gt;isVerified() ? $this-&gt;getReference() : $this-&gt;getPaymentLink();\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\r\n\r\n\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 public function isVerified(): bool\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 return $this-&gt;transaction &amp;&amp; ($transaction-&gt;type == 'withdrawal') &amp;&amp; $this-&gt;transaction-&gt;isVerified();\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\r\n\r\n\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 public function getReference(): string\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 return ['reference'=&gt;$this-&gt;transaction-&gt;reference, 'status'=&gt;'verified'];\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\r\n\r\n\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 public function getPaymentLink(): string\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 return ['link'=&gt;$this-&gt;transaction-&gt;paymentLink, 'status'=&gt;'not verified'];\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\r\n\r\n<\/pre>\n<ol start=\"4\">\n<li><strong>Use SonarLint For Removing Unwanted Code Complexity<\/strong><\/li>\n<\/ol>\n<p>Sonar static analysis helps you build and maintain high-quality PHP code. Covering popular build systems, standards, and versions, Sonar elevates your coding game while keeping dangerous vulnerabilities at bay.<\/p>\n<p>Sonar helps you write clean code<\/p>\n<ol start=\"5\">\n<li><strong>Follow Laravel naming conventions<\/strong><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<p><strong> What\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 How\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Good\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0Bad<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p><strong>\u00a0 Controller\u00a0 \u00a0 \u00a0<\/strong> \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0singular\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ArticleController\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ArticlesController<\/p>\n<p>&nbsp;<\/p>\n<p><strong>\u00a0 Route<\/strong>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0plural\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0articles\/1\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 article\/1<\/p>\n<p>&nbsp;<\/p>\n<p><strong>\u00a0 Route name\u00a0\u00a0<\/strong>\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 snake_case\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0users.show_active\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 users.show-active,<\/p>\n<p>with dot\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 show-active-users\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 notation<\/p>\n<p>&nbsp;<\/p>\n<p><strong> Model\u00a0\u00a0<\/strong>\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 singular\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0User\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Users<\/p>\n<p>&nbsp;<\/p>\n<ol start=\"6\">\n<li><strong>Use shorter and more readable syntax where possible<\/strong><\/li>\n<\/ol>\n<p><em>\u00a0 Bad:<\/em><\/p>\n<pre>\u00a0\u00a0\u00a0\u00a0\u00a0 $request-&gt;session()-&gt;get('cart');\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 $request-&gt;input('name');<\/pre>\n<p><em>\u00a0 Good:<\/em><\/p>\n<pre>\u00a0\u00a0\u00a0\u00a0\u00a0 session('cart');\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 $request-&gt;name;<\/pre>\n<p>&nbsp;<\/p>\n<ol start=\"7\">\n<li><strong>Validation<\/strong><\/li>\n<\/ol>\n<p>Move validation from controllers to Request classes.<\/p>\n<p><em>\u00a0\u00a0\u00a0 Bad:<\/em><\/p>\n<pre>\u00a0\u00a0\u00a0\u00a0\u00a0 public function store(Request $request)\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 $request-&gt;validate([\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'title' =&gt; 'required|unique:posts|max:255',\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'body' =&gt; 'required',\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'publish_at' =&gt; 'nullable|date',\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 ]);\r\n\r\n\r\n\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 ...\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/pre>\n<p><em>\u00a0\u00a0\u00a0\u00a0\u00a0 Good:<\/em><\/p>\n<pre>\u00a0\u00a0\u00a0\u00a0\u00a0 public function store(PostRequest $request)\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 ...\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\r\n\r\n\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 class PostRequest extends Request\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 public function rules(): array\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return [\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'title' =&gt; 'required|unique:posts|max:255',\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'body' =&gt; 'required',\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 'publish_at' =&gt; 'nullable|date',\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ];\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\r\n\r\n<\/pre>\n<ol start=\"8\">\n<li>Chunk data for data-heavy tasks<\/li>\n<\/ol>\n<p><em>\u00a0 Bad:<\/em><\/p>\n<pre>\u00a0\u00a0\u00a0\u00a0\u00a0 $users = $this-&gt;get();\r\n\r\n\r\n\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 foreach ($users as $user) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 ...\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 }<\/pre>\n<p><em>\u00a0\u00a0 Good:<\/em><\/p>\n<pre>\u00a0\u00a0\u00a0\u00a0\u00a0 $this-&gt;chunk(500, function ($users) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 foreach ($users as $user) {\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ...\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 }\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 });<\/pre>\n<ol start=\"9\">\n<li><strong>Other good practices<\/strong><\/li>\n<\/ol>\n<p>Avoid using patterns and tools that are alien to Laravel and similar frameworks (i.e. RoR, Django). If you like the Symfony (or Spring) approach for building apps, it&#8217;s a good idea to use these frameworks instead.<\/p>\n<p>&#8211; Never put any logic in route files.<\/p>\n<p>&#8211; Minimize usage of vanilla PHP in Blade templates.<\/p>\n<p>&#8211; Use in-memory DB for testing.<\/p>\n<p>&#8211; Do not override standard framework features to avoid problems related to updating the framework version and many other issues.<\/p>\n<p>&#8211; Use modern PHP syntax where possible, but don&#8217;t forget about readability.<\/p>\n<p>&#8211; Avoid using View Composers and similar tools unless you really know what you&#8217;re doing. In most cases, there is a better way to solve the problem.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Always Use the Latest Version Laravel becomes more secure and faster with each upgrade. By using the latest Laravel version, you can build more functional and secure websites. For example, Laravel 9.x, the newest release of Laravel released in February 2022, offers the following features: Anonymous class migrations are the default behavior, so multiple migrations [&hellip;]<\/p>\n","protected":false},"author":246,"featured_media":7926,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[865,864,605],"tags":[123,933,934,607,617],"class_list":["post-7925","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-data-engineering","category-data-science","category-laravel","tag-best-coding-practices","tag-laravel-blog","tag-laravel-coding","tag-laravel-eloquent-tutorial","tag-laravel-task-scheduling"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>9 Laravel Best Practices for Building Better Websites - InnovationM - Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.innovationm.com\/blog\/9-laravel-best-practices\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"9 Laravel Best Practices for Building Better Websites - InnovationM - Blog\" \/>\n<meta property=\"og:description\" content=\"Always Use the Latest Version Laravel becomes more secure and faster with each upgrade. By using the latest Laravel version, you can build more functional and secure websites. For example, Laravel 9.x, the newest release of Laravel released in February 2022, offers the following features: Anonymous class migrations are the default behavior, so multiple migrations [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.innovationm.com\/blog\/9-laravel-best-practices\/\" \/>\n<meta property=\"og:site_name\" content=\"InnovationM - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-19T07:20:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2023\/10\/9-Laravel-Best-Practices-for-Building-Better-Websites.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ankit Sahani\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ankit Sahani\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/9-laravel-best-practices\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/9-laravel-best-practices\\\/\"},\"author\":{\"name\":\"Ankit Sahani\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/c5fb32c4a5f5fbee2b7d7ef87f17fb84\"},\"headline\":\"9 Laravel Best Practices for Building Better Websites\",\"datePublished\":\"2023-10-19T07:20:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/9-laravel-best-practices\\\/\"},\"wordCount\":484,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/9-laravel-best-practices\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/9-Laravel-Best-Practices-for-Building-Better-Websites.png\",\"keywords\":[\"Best Coding Practices\",\"laravel blog\",\"laravel coding\",\"Laravel Eloquent Tutorial\",\"Laravel Task Scheduling\"],\"articleSection\":[\"Data Engineering\",\"Data Science\",\"Laravel\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/9-laravel-best-practices\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/9-laravel-best-practices\\\/\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/9-laravel-best-practices\\\/\",\"name\":\"9 Laravel Best Practices for Building Better Websites - InnovationM - Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/9-laravel-best-practices\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/9-laravel-best-practices\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/9-Laravel-Best-Practices-for-Building-Better-Websites.png\",\"datePublished\":\"2023-10-19T07:20:35+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/c5fb32c4a5f5fbee2b7d7ef87f17fb84\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/9-laravel-best-practices\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/9-laravel-best-practices\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/9-laravel-best-practices\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/9-Laravel-Best-Practices-for-Building-Better-Websites.png\",\"contentUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/9-Laravel-Best-Practices-for-Building-Better-Websites.png\",\"width\":1920,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/9-laravel-best-practices\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"9 Laravel Best Practices for Building Better Websites\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/\",\"name\":\"InnovationM - Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/#\\\/schema\\\/person\\\/c5fb32c4a5f5fbee2b7d7ef87f17fb84\",\"name\":\"Ankit Sahani\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/e0af71b1-0455-4ce4-a4bc-39c24dc38e39-96x96.jpg\",\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/e0af71b1-0455-4ce4-a4bc-39c24dc38e39-96x96.jpg\",\"contentUrl\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/10\\\/e0af71b1-0455-4ce4-a4bc-39c24dc38e39-96x96.jpg\",\"caption\":\"Ankit Sahani\"},\"url\":\"https:\\\/\\\/www.innovationm.com\\\/blog\\\/author\\\/ankit-sahani\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"9 Laravel Best Practices for Building Better Websites - InnovationM - Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.innovationm.com\/blog\/9-laravel-best-practices\/","og_locale":"en_US","og_type":"article","og_title":"9 Laravel Best Practices for Building Better Websites - InnovationM - Blog","og_description":"Always Use the Latest Version Laravel becomes more secure and faster with each upgrade. By using the latest Laravel version, you can build more functional and secure websites. For example, Laravel 9.x, the newest release of Laravel released in February 2022, offers the following features: Anonymous class migrations are the default behavior, so multiple migrations [&hellip;]","og_url":"https:\/\/www.innovationm.com\/blog\/9-laravel-best-practices\/","og_site_name":"InnovationM - Blog","article_published_time":"2023-10-19T07:20:35+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2023\/10\/9-Laravel-Best-Practices-for-Building-Better-Websites.png","type":"image\/png"}],"author":"Ankit Sahani","twitter_misc":{"Written by":"Ankit Sahani","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.innovationm.com\/blog\/9-laravel-best-practices\/#article","isPartOf":{"@id":"https:\/\/www.innovationm.com\/blog\/9-laravel-best-practices\/"},"author":{"name":"Ankit Sahani","@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/c5fb32c4a5f5fbee2b7d7ef87f17fb84"},"headline":"9 Laravel Best Practices for Building Better Websites","datePublished":"2023-10-19T07:20:35+00:00","mainEntityOfPage":{"@id":"https:\/\/www.innovationm.com\/blog\/9-laravel-best-practices\/"},"wordCount":484,"commentCount":0,"image":{"@id":"https:\/\/www.innovationm.com\/blog\/9-laravel-best-practices\/#primaryimage"},"thumbnailUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2023\/10\/9-Laravel-Best-Practices-for-Building-Better-Websites.png","keywords":["Best Coding Practices","laravel blog","laravel coding","Laravel Eloquent Tutorial","Laravel Task Scheduling"],"articleSection":["Data Engineering","Data Science","Laravel"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.innovationm.com\/blog\/9-laravel-best-practices\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.innovationm.com\/blog\/9-laravel-best-practices\/","url":"https:\/\/www.innovationm.com\/blog\/9-laravel-best-practices\/","name":"9 Laravel Best Practices for Building Better Websites - InnovationM - Blog","isPartOf":{"@id":"https:\/\/www.innovationm.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.innovationm.com\/blog\/9-laravel-best-practices\/#primaryimage"},"image":{"@id":"https:\/\/www.innovationm.com\/blog\/9-laravel-best-practices\/#primaryimage"},"thumbnailUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2023\/10\/9-Laravel-Best-Practices-for-Building-Better-Websites.png","datePublished":"2023-10-19T07:20:35+00:00","author":{"@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/c5fb32c4a5f5fbee2b7d7ef87f17fb84"},"breadcrumb":{"@id":"https:\/\/www.innovationm.com\/blog\/9-laravel-best-practices\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.innovationm.com\/blog\/9-laravel-best-practices\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.innovationm.com\/blog\/9-laravel-best-practices\/#primaryimage","url":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2023\/10\/9-Laravel-Best-Practices-for-Building-Better-Websites.png","contentUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2023\/10\/9-Laravel-Best-Practices-for-Building-Better-Websites.png","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/www.innovationm.com\/blog\/9-laravel-best-practices\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.innovationm.com\/blog\/"},{"@type":"ListItem","position":2,"name":"9 Laravel Best Practices for Building Better Websites"}]},{"@type":"WebSite","@id":"https:\/\/www.innovationm.com\/blog\/#website","url":"https:\/\/www.innovationm.com\/blog\/","name":"InnovationM - Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.innovationm.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.innovationm.com\/blog\/#\/schema\/person\/c5fb32c4a5f5fbee2b7d7ef87f17fb84","name":"Ankit Sahani","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2023\/10\/e0af71b1-0455-4ce4-a4bc-39c24dc38e39-96x96.jpg","url":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2023\/10\/e0af71b1-0455-4ce4-a4bc-39c24dc38e39-96x96.jpg","contentUrl":"https:\/\/www.innovationm.com\/blog\/wp-content\/uploads\/2023\/10\/e0af71b1-0455-4ce4-a4bc-39c24dc38e39-96x96.jpg","caption":"Ankit Sahani"},"url":"https:\/\/www.innovationm.com\/blog\/author\/ankit-sahani\/"}]}},"_links":{"self":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts\/7925","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/users\/246"}],"replies":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/comments?post=7925"}],"version-history":[{"count":0,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/posts\/7925\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/media\/7926"}],"wp:attachment":[{"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/media?parent=7925"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/categories?post=7925"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.innovationm.com\/blog\/wp-json\/wp\/v2\/tags?post=7925"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}