{"id":14244,"date":"2016-08-01T12:15:21","date_gmt":"2016-08-01T09:15:21","guid":{"rendered":"https:\/\/www.webcodegeeks.com\/?p=14244"},"modified":"2016-07-30T20:40:14","modified_gmt":"2016-07-30T17:40:14","slug":"getting-started-laravel-codeship","status":"publish","type":"post","link":"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/","title":{"rendered":"Getting Started With Laravel On Codeship"},"content":{"rendered":"<p><a href=\"https:\/\/laravel.com\/\">Laravel<\/a> is one of, if not the most popular framework around for PHP today. Using GitHub as my source of truth, Laravel has 24,543 stars, 690 of which it has received this month alone. This is admittedly a simplistic, dare I say even rudimentary, measure of success or quality. But it does show both inertia and uptake.<\/p>\n<p>Given this inertia and given that Laravel is a framework for the web\u2019s most-used software development language, it\u2019s important to consider how significant it may become over time, with an increasing number of applications based upon it or affected by it in some way. For that reason, and given that I\u2019m so passionate about continuous deployment and integration, today I\u2019m launching a series of articles demonstrating how to integrate Laravel with Codeship.<\/p>\n<p>My intent isn\u2019t to further popularize Laravel. Whether it\u2019s <a href=\"http:\/\/laracon.us\">Laracon US<\/a>, <a href=\"http:\/\/laracon.eu\/2016\/\">Laracon EU<\/a>, <a href=\"https:\/\/laracasts.com\">Laracasts<\/a>, or one of the many dedicated podcasts or blogs, the community\u2019s doing a fantastic job of promoting it without needing my help. My intent is to show you how to use Codeship as part of your CI workflow so that you can deploy your applications with a minimum of fuss and effort.<\/p>\n<h2>The Laravel Series Overview<\/h2>\n<p>If we lay a solid foundation for future success, we\u2019ll be able to gradually build in complexity without getting overwhelmed in the process. Let\u2019s start at the beginning, with a simple, uncomplicated application.<\/p>\n<p>First, we\u2019ll install the application from a project repository, <a href=\"https:\/\/github.com\/settermjd\/laravel-codeship-deployment\">which you can find on GitHub<\/a>. Then we\u2019re going to link the GitHub project to our Codeship account and create a project to manage it. We\u2019ll then work through the required pipeline configuration and related settings so that our application can be tested and deployed.<\/p>\n<p>The application we\u2019re going to build is a basic URL shortener. By the time we\u2019re done, the application will support the following functionality:<\/p>\n<ul>\n<li>List all routes<\/li>\n<li>Add new shortened routes<\/li>\n<li>Update existing routes<\/li>\n<li>Delete existing routes<\/li>\n<\/ul>\n<p>As you can see, it\u2019s essentially a simple <a href=\"https:\/\/en.wikipedia.org\/wiki\/Create,_read,_update_and_delete\">CRUD<\/a> application. I say simple because the core of the application, the shortening code, won\u2019t be written by me. For that, I\u2019ll be using an external library. Also, we\u2019ll just be managing records in a database, and not a very complicated one at that. However, this will give us enough to work with to emulate a normal CI workflow, which will include:<\/p>\n<ul>\n<li>Making a code change<\/li>\n<li>Pushing changes to version control system of choice<\/li>\n<li>Triggering a build<\/li>\n<li>Deploying if build succeeds<\/li>\n<\/ul>\n<p>We\u2019re also going to need to take environment variables into consideration, as we would in a normal deployment workflow. One aspect, <a href=\"https:\/\/www.webcodegeeks.com\/web-development\/continuous-integration-important\/\">which is very close to my heart<\/a>, is that the application is going to be test-driven.<\/p>\n<p>Given these elements, I\u2019m confident that this series won\u2019t fall into the \u201cHello World\u201d category. There\u2019s more than enough meat on its bones to cover aspects that we\u2019d encounter on a regular basis.<\/p>\n<h2>The Application Foundation<\/h2>\n<p>The application will be based on <a href=\"https:\/\/laravel-news.com\/2015\/12\/laravel-5-2-is-released\/\">Laravel 5.2<\/a> and require only one external package, <a href=\"https:\/\/laravelcollective.com\/docs\/5.2\/html\">laravelcollective\/html 5.2<\/a>. This is so we can quickly build the forms for manipulating the route information. The rest will be stock Laravel. To keep things simple, the database will be SQLite 3.<\/p>\n<p>Over the course of the series, I\u2019ll also demonstrate how to integrate external vendors, such as <a href=\"https:\/\/www.elephantsql.com\">ElephantSQL<\/a>. This isn\u2019t strictly necessary, but I feel it\u2019s important to show how it\u2019s done.<\/p>\n<p>And finally, to follow along with this series and to deploy the application yourself, you\u2019re going to need to have an API key for Google\u2019s URL Shortener API. If you don\u2019t already have one, <a href=\"https:\/\/developers.google.com\/url-shortener\/v1\/getting_started\">then take the time now to set one up<\/a>.<\/p>\n<h3>The routes<\/h3>\n<p>As you can see in <code>app\/Http\/routes.php<\/code>, the application has two routes:<\/p>\n<ul>\n<li><code>\/view-urls<\/code>. Links to <code>UrlController@viewUrls<\/code> and renders all of the routes available in the database.<\/li>\n<li><code>\/manage-url\/<\/code>. Links to <code>UrlController@manageUrl<\/code> and will be responsible for adding new routes.<\/li>\n<\/ul>\n<h3>The controller<\/h3>\n<p>If we dig into <code>app\/Http\/Controllers\/UrlController.php<\/code>, we see that the two methods are very simplistic. <code>viewUrls<\/code> makes a call to the <code>Url<\/code> model\u2019s <code>all()<\/code> method, making a blanket request to retrieve all available routes. After retrieval, it sets them as a template variable called <code>urls<\/code>.<\/p>\n<p><code>manageUrl<\/code> is also a simplistic method. If the request is a POST request and data is present, it will retrieve the url provided by the user and created a shortened version of it by using <a href=\"https:\/\/packagist.org\/packages\/zenapply\/laravel-shortener\">the Laravel Shortener package<\/a>. It then sets that information in a new <code>Url<\/code> entity and saves the record in the database by making a call to the <code>Url<\/code> model\u2019s <code>save()<\/code> method. It then redirects to <code>\/view-urls<\/code>, where the new URL and its shortened equivalent will be displayed in the URL list.<\/p>\n<p>On purpose, it performs no validation or defensive coding at this stage. That may sound a bit insane, but we\u2019re starting off light. Over the course of this series, proper validation and input data sanitation will be added.<\/p>\n<h3>The database configuration<\/h3>\n<p>Now let\u2019s look at the database configuration. Given that we\u2019re using SQLite initially, it\u2019s not going to be too involved. This extract, taken from <code>config\/database.php<\/code>, shows that I\u2019ve set the default database as <code>sqlite<\/code> and updated the configuration to point to the database file located under <code>\/database<\/code>.<\/p>\n<pre class=\"brush:php\">'default' =&gt; env('DB_CONNECTION', 'sqlite'),\r\n\r\n'sqlite' =&gt; [\r\n    'driver' =&gt; 'sqlite',\r\n    'database' =&gt; env('DB_DATABASE', database_path('database.sqlite')),\r\n],<\/pre>\n<h3>The database migrations<\/h3>\n<p>Database migrations are one of the key aspects that I\u2019ve come to like about Laravel. It bundles in migrations as part of the default install.<\/p>\n<p>Now applications are diverse in scope and nature, and as a package maintainer, it\u2019s hard to know exactly what kind of needs your end users will have. But if you\u2019re prototyping an application, then using a database as your initial data source makes a lot of sense. Given that, the choice of bundling a database migration component as part of the core install makes a lot of sense as well. Here\u2019s my initial migration.<\/p>\n<pre class=\"brush:php\">Schema::create('urls', function (Blueprint $table) {\r\n    $table-&gt;increments('id');\r\n    $table-&gt;string('shortened_url')-&gt;comment('Stores shortened url');\r\n    $table-&gt;string('original_url')-&gt;comment('Stores shortened url');\r\n    $table-&gt;timestamps();\r\n});<\/pre>\n<p>You can see that it creates one table, called <code>urls<\/code>. It has an auto-incrementing <code>id<\/code> field, a field for the original URL, one for the shortened URL, and, using the timestamps method, auto-creates a field for when the record was created and updated.<\/p>\n<h3>The tests<\/h3>\n<p>Now to the tests. Here\u2019s a sample, available in <code>tests\/UrlControllerTests.php<\/code>. The first test checks the <code>view-urls<\/code> route.<\/p>\n<p>First off, we\u2019ll load a record into the database, just one to keep things simple, then visit the page and run some checks on it. We go to the page, check the response code, the URL, and that the page contains the information that should have been rendered in the template, which was extracted from the database.<\/p>\n<pre class=\"brush:php\">public function testViewUrlsPage()\r\n{\r\n    \/\/ Load some sample data\r\n    $url = factory(App\\Url::class)-&gt;create([\r\n        'shortened_url' =&gt; 'http:\/\/tSQ1r84',\r\n        'original_url' =&gt; 'http:\/\/www.google.com',\r\n    ]);\r\n\r\n    $this-&gt;visit('\/view-urls')\r\n        -&gt;assertResponseOk()\r\n        -&gt;seePageIs('\/view-urls')\r\n        -&gt;see('Manage URLs')\r\n        -&gt;see(\"This form let's you shorten a new url, or update an existing one.\")\r\n        -&gt;see('http:\/\/tSQ1r84')\r\n        -&gt;see('http:\/\/www.google.com');\r\n\r\n    $this-&gt;visit('\/view-urls')\r\n        -&gt;click('View URLs')\r\n        -&gt;seePageIs('\/view-urls');\r\n}<\/pre>\n<p>Following that, we perform a minor check to ensure that we can follow a link on the page. These aren\u2019t exhaustive tests, but then, the application\u2019s quite young! Over time, they\u2019ll become more full-featured. If you are keen to know more about the testing functionality, definitely check out <a href=\"https:\/\/laravel.com\/docs\/5.2\/testing\">the Laravel testing documentation<\/a>.<\/p>\n<h2>Adding The Application to Codeship<\/h2>\n<p>Now that we\u2019ve looked at the application, let\u2019s create the initial integration with Codeship. For this series, I\u2019ll assume that you already have <a href=\"https:\/\/codeship.com\/registrations\/new\">an account at your disposal<\/a>.<\/p>\n<p>After logging in, create a new project from your dashboard and choose <strong>Connect with GitHub repository<\/strong>. Then enter <a href=\"https:\/\/github.com\/settermjd\/laravel-codeship-deployment\">the URL of the repository<\/a>, which you can find in <strong>Clone or download<\/strong>, in your fork of the project. After that\u2019s done, you are ready to configure the project.<\/p>\n<p>Codeship\u2019s pretty handy in that it offers a default set of options based on some broad project types, such as PHP, Ruby on Rails, Python, Go, Dart, and Java. But it doesn\u2019t offer a framework-specific set of configuration options. So, we\u2019re starting off with the PHP default, which you can see below.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.codeship.com\/wp-content\/uploads\/2016\/07\/basic-deployment-configuration.png\" width=\"1024\" height=\"744\" \/><\/p>\n<p>It\u2019s setting the PHP binary to be version 5.6 (arguably it should be 7.0) and to install the code from the repository. If we were to try this, as I originally did, it would result in a series of failures. To set up the project properly, we\u2019re going to need the following configuration:<\/p>\n<pre class=\"brush:php\">phpenv local 7.0\r\nmkdir .\/bootstrap\/cache\r\ncomposer install --prefer-source --no-interaction\r\ncp -v .env.example .env\r\nphp artisan key:generate\r\ntouch database\/database.sqlite\r\nphp artisan migrate<\/pre>\n<p>Let\u2019s step through that. We\u2019re setting our environment to use PHP 7.0. We\u2019re then creating the directory, <code>bootstrap\/cache<\/code>, which is required by Laravel\u2019s command line tool, Artisan. We need to do this because it\u2019s created as part of the package creation process, which won\u2019t happen when we install from source.<\/p>\n<p>After that\u2019s done, we can then install from source, using Composer. We then need to set the application key and create the SQLite database file, called <code>database.sqlite<\/code> and located in <code>\/database<\/code>. With these steps complete, we can now run the database migration, again using Artisan.<\/p>\n<h2>Configuring the Environment<\/h2>\n<p>There\u2019s one task left to do, which is to configure the project environment. We need to tell Laravel what the default database connection is; otherwise, it\u2019s going to assume that we\u2019re using MySQL, and the build will fail.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/blog.codeship.com\/wp-content\/uploads\/2016\/07\/environment-settings.png\" width=\"1732\" height=\"510\" \/><\/p>\n<p>To do that, navigate to the environment settings by clicking <strong>Environment<\/strong> under <strong>Project Settings<\/strong>. From there, we provide a KEY of <code>DB_CONNECTION<\/code> and a value of <code>sqlite<\/code> and save the configuration. We then add a second setting, called <code>GOOGLE_SHORTENER_TOKEN_1<\/code>. For the value, we set the API key, which you can retrieve <a href=\"https:\/\/console.developers.google.com\/apis\/dashboard\">from your GoogleAPIs account<\/a>.<\/p>\n<h2>Triggering a Build<\/h2>\n<p>With the project now configured, it\u2019s time to put it to the test. To do that, I made a minor change to the tests and pushed the changes to GitHub. The build, I\u2019m happy to say, was successful.<\/p>\n<p>And that\u2019s the first part of how to set up a continuous deployment workflow for a basic Laravel application. What we\u2019ve not yet done is cover deploying the code to a test or production server, such as Heroku, Amazon, or DigitalOcean, or how to configure notifications.<\/p>\n<p>That\u2019s what we\u2019ll be covering in part two of this series. We\u2019ll also see how to work with an external service provider, such as <a href=\"https:\/\/www.elephantsql.com\">ElephantSQL<\/a>. Stay tuned, as this will start to flesh out the application and its accompanying complexity.<\/p>\n<h2>Wrapping Up Part I<\/h2>\n<p>As this is the first time that a deploy\u2019s being made, I see no harm in the last three steps. However, we could have approached the deployment configuration a little differently.<\/p>\n<p>We could have, and will in future, store the database file in the Git repository. We could also have created the cache directory previously and created an empty <code>.gitkeep<\/code> file, so that the directory could be managed by Git. This way, we could remove both of these steps, simplifying the configuration. So long as the database file was there, there\u2019d be no problem in running the migration.<\/p>\n<p>However, as an initial configuration, this one works and, I hope, helps with understanding all of the working parts involved.<\/p>\n<div class=\"attribution\">\n<table>\n<tbody>\n<tr>\n<td><span class=\"reference\">Reference: <\/span><\/td>\n<td><a href=\"https:\/\/blog.codeship.com\/getting-started-laravel-codeship\/\">Getting Started With Laravel On Codeship<\/a> from our <a href=\"http:\/\/www.webcodegeeks.com\/join-us\/wcg\/\">WCG partner<\/a>\u00a0Matthew Setter at the <a href=\"http:\/\/blog.codeship.com\/\">Codeship Blog<\/a> blog.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Laravel is one of, if not the most popular framework around for PHP today. Using GitHub as my source of truth, Laravel has 24,543 stars, 690 of which it has received this month alone. This is admittedly a simplistic, dare I say even rudimentary, measure of success or quality. But it does show both inertia &hellip;<\/p>\n","protected":false},"author":119,"featured_media":930,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10],"tags":[385],"class_list":["post-14244","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php","tag-laravel"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Getting Started With Laravel On Codeship - Web Code Geeks - 2026<\/title>\n<meta name=\"description\" content=\"Laravel is one of, if not the most popular framework around for PHP today. Using GitHub as my source of truth, Laravel has 24,543 stars, 690 of which it\" \/>\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.webcodegeeks.com\/php\/getting-started-laravel-codeship\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Getting Started With Laravel On Codeship - Web Code Geeks - 2026\" \/>\n<meta property=\"og:description\" content=\"Laravel is one of, if not the most popular framework around for PHP today. Using GitHub as my source of truth, Laravel has 24,543 stars, 690 of which it\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/\" \/>\n<meta property=\"og:site_name\" content=\"Web Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/webcodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2016-08-01T09:15:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/php-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Matthew Setter\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@settermjd\" \/>\n<meta name=\"twitter:site\" content=\"@webcodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Setter\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/\"},\"author\":{\"name\":\"Matthew Setter\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/b05e82f4b706b29d2bfb20134e3d2f35\"},\"headline\":\"Getting Started With Laravel On Codeship\",\"datePublished\":\"2016-08-01T09:15:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/\"},\"wordCount\":1823,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/php-logo.jpg\",\"keywords\":[\"Laravel\"],\"articleSection\":[\"PHP\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/\",\"name\":\"Getting Started With Laravel On Codeship - Web Code Geeks - 2026\",\"isPartOf\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/php-logo.jpg\",\"datePublished\":\"2016-08-01T09:15:21+00:00\",\"description\":\"Laravel is one of, if not the most popular framework around for PHP today. Using GitHub as my source of truth, Laravel has 24,543 stars, 690 of which it\",\"breadcrumb\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/#primaryimage\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/php-logo.jpg\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/php-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.webcodegeeks.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PHP\",\"item\":\"https:\/\/www.webcodegeeks.com\/category\/php\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Getting Started With Laravel On Codeship\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#website\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"name\":\"Web Code Geeks\",\"description\":\"Web Developers Resource Center\",\"publisher\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.webcodegeeks.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\/\/www.webcodegeeks.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"contentUrl\":\"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/webcodegeeks\",\"https:\/\/x.com\/webcodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/b05e82f4b706b29d2bfb20134e3d2f35\",\"name\":\"Matthew Setter\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/93462db49ad0350a33d70149761702068941d2e0c07150ae8c32df9512fc2bde?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/93462db49ad0350a33d70149761702068941d2e0c07150ae8c32df9512fc2bde?s=96&d=mm&r=g\",\"caption\":\"Matthew Setter\"},\"description\":\"Matthew Setter is a developer and technical writer. He creates web-based applications and technical content that engage developers with platforms, technologies, applications, and tools.\",\"sameAs\":[\"https:\/\/x.com\/settermjd\"],\"url\":\"https:\/\/www.webcodegeeks.com\/author\/matthew-setter\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Getting Started With Laravel On Codeship - Web Code Geeks - 2026","description":"Laravel is one of, if not the most popular framework around for PHP today. Using GitHub as my source of truth, Laravel has 24,543 stars, 690 of which it","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.webcodegeeks.com\/php\/getting-started-laravel-codeship\/","og_locale":"en_US","og_type":"article","og_title":"Getting Started With Laravel On Codeship - Web Code Geeks - 2026","og_description":"Laravel is one of, if not the most popular framework around for PHP today. Using GitHub as my source of truth, Laravel has 24,543 stars, 690 of which it","og_url":"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/","og_site_name":"Web Code Geeks","article_publisher":"https:\/\/www.facebook.com\/webcodegeeks","article_published_time":"2016-08-01T09:15:21+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/php-logo.jpg","type":"image\/jpeg"}],"author":"Matthew Setter","twitter_card":"summary_large_image","twitter_creator":"@settermjd","twitter_site":"@webcodegeeks","twitter_misc":{"Written by":"Matthew Setter","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/#article","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/"},"author":{"name":"Matthew Setter","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/b05e82f4b706b29d2bfb20134e3d2f35"},"headline":"Getting Started With Laravel On Codeship","datePublished":"2016-08-01T09:15:21+00:00","mainEntityOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/"},"wordCount":1823,"commentCount":0,"publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/php-logo.jpg","keywords":["Laravel"],"articleSection":["PHP"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/","url":"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/","name":"Getting Started With Laravel On Codeship - Web Code Geeks - 2026","isPartOf":{"@id":"https:\/\/www.webcodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/#primaryimage"},"image":{"@id":"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/#primaryimage"},"thumbnailUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/php-logo.jpg","datePublished":"2016-08-01T09:15:21+00:00","description":"Laravel is one of, if not the most popular framework around for PHP today. Using GitHub as my source of truth, Laravel has 24,543 stars, 690 of which it","breadcrumb":{"@id":"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/#primaryimage","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/php-logo.jpg","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2014\/10\/php-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.webcodegeeks.com\/php\/getting-started-laravel-codeship\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.webcodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"PHP","item":"https:\/\/www.webcodegeeks.com\/category\/php\/"},{"@type":"ListItem","position":3,"name":"Getting Started With Laravel On Codeship"}]},{"@type":"WebSite","@id":"https:\/\/www.webcodegeeks.com\/#website","url":"https:\/\/www.webcodegeeks.com\/","name":"Web Code Geeks","description":"Web Developers Resource Center","publisher":{"@id":"https:\/\/www.webcodegeeks.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.webcodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.webcodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.webcodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.webcodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/webcodegeeks","https:\/\/x.com\/webcodegeeks"]},{"@type":"Person","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/b05e82f4b706b29d2bfb20134e3d2f35","name":"Matthew Setter","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.webcodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/93462db49ad0350a33d70149761702068941d2e0c07150ae8c32df9512fc2bde?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/93462db49ad0350a33d70149761702068941d2e0c07150ae8c32df9512fc2bde?s=96&d=mm&r=g","caption":"Matthew Setter"},"description":"Matthew Setter is a developer and technical writer. He creates web-based applications and technical content that engage developers with platforms, technologies, applications, and tools.","sameAs":["https:\/\/x.com\/settermjd"],"url":"https:\/\/www.webcodegeeks.com\/author\/matthew-setter\/"}]}},"_links":{"self":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/14244","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/users\/119"}],"replies":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/comments?post=14244"}],"version-history":[{"count":0,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/posts\/14244\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media\/930"}],"wp:attachment":[{"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/media?parent=14244"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/categories?post=14244"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.webcodegeeks.com\/wp-json\/wp\/v2\/tags?post=14244"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}