Connect with us

Laravel 8 is now released!




DEVELOPER PROGRAMMING: Laravel 8 is now released! [New  Developer Programming] » Naijacrawl
Photo: Naijacrawl

Laravel 8 is now released and includes many new features including Laravel Jetstream, a models directory, model factory classes, migration squashing, rate-limiting improvements, time testing helpers, dynamic blade components, and many more features.

Before we jump into the new features, we’d like to point out that starting with version 6, Laravel now follows semver and will release a new major version every six months. You can see how the release process works here.

Laravel Jetstream

Laravel Jetstream improves upon the existing Laravel UI scaffolding found in previous versions. It provides a starting point for new projects, including login, registration, email verification, two-factor authentication, session management, API support via Laravel, and team management.

Models Directory

Laravel 8’s application skeleton includes an app/Models directory. All generator commands assume models exist in app/Models; however if this directory doesn’t exist, the framework will assume the application keeps models within the app/ folder.

Model Factory Classes

Eloquent model factories are now class-based starting in Laravel 8, with improved support for relationships between factories (i.e., a user has many posts). 

Migration Squashing

If your application contains many migration files, you can now squash them into a single SQL file. This file will be executed first when running migrations, followed by any remaining migration files that are not part of the squashed schema file. Squashing existing migrations can decrease migration file bloat and possibly improve performance while running tests.

Improved Rate Limiting

Laravel 8 brings improvements to existing rate limiting functionality while supporting backward compatibility with the existing throttle middleware and offering far more flexibility. Laravel 8 has the concept of Rate Limiters that you can define via a facade.

Time Testing Helpers

Laravel users have enjoyed full control over time modification via the excellent Carbon PHP library. Laravel 8 brings this one step further by providing convenient test helpers for manipulating the time within tests. When using these methods, the time will reset between each test.

Dynamic Blade Components

Sometimes you need to render a blade component dynamically at runtime. Laravel 8 provides the  to render the component.

Find out more about Laravel v8…

These are just a few of the new features in Laravel 8 and to see a complete list check out the Laravel 8 release notes as well as the upgrade guide. Also, don’t forget about Laravel Shift if you want an easy way of updating.

Taylor also gave a walkthrough of some of these features at Laracon Online and, you can still purchase a ticket if you’d like to see that. Also, Laracasts: What’s New in Laravel 8 series can help you get up-to-speed with new features in this release.

As with all releases, Laravel is made possible by so many people and, we’d like to thank everyone that contributes, that submits PR’s, that shares ideas and that uses the framework. Laravel is truly a global team effort.

Click Here To Comment



I am a software developer, like meeting people and love blogging, that's why I developed naijacrawl because that's what I love doing.

Continue Reading
Click to comment

Be first to comment

    Leave a Reply

    Your email address will not be published. Required fields are marked *

    Upload files to Amazon S3 from the browser using pre-signed post (Laravel, Vue.js/Nuxt.js)




    DEVELOPER PROGRAMMING: Upload files to Amazon S3 from the browser using pre-signed post (Laravel, Vue.js/Nuxt.js) [New  Developer Programming] » Naijacrawl
    Photo: Naijacrawl

    Upload files to Amazon S3 from the browser using pre-signed post (Laravel, Vue.js/Nuxt.js)

    This article was written by Okonkwo Buchi Flair a ccolleague of mind, read and know how to simply upload your files via Amazon S3.

    original article can be found here

    Before I begin I would love to point out that is my first post so please pardon me any errors you may find as you read along

    Recently I’ve been working on a e-learning platform which of course was going to deal with a lot of uploads and letting the server handle all that will be quite… 😫 And so I had to find an alternative which was direct uploads from the browser. I hit Google search and boy! there were tons of info but then they all made use of javascript, the ones with php used html forms. However, in this post we won’t be using html form. we’ll be making use of axios.

    This post assumes you’ve set up your s3 bucket and is fully focused on how to get your uploads working. Don’t forget your CORS configuration as well.

    First add your bucket details to your .env file and don’t forget to restart when you make changes to your .env file


    Next install aws sdk by running the following code

    composer require aws/aws-sdk-php-laravel

    Create a controller that’s going to take care of your uploads. Meanwhile the filesystem configuration file located at config/filesystem.php is already set up by default to help you access your S3 configurations in the .env file

    use Aws\S3\PostObjectV4;
    use Aws\S3\S3Client;
    class MyController extends Controller
    public function upload(Request $request)
    $filename =  $request->filename;
    $directory =  $request->directory;
    $s3 = config('filesystems.disks.s3');
    $client = new S3Client(['version' => 'latest','region' => $s3['region'],'credentials' => ['key' => $s3['key'],'secret' => $s3['secret'],
    $bucket = $s3['bucket'];
    $prefix = $directory . '/';
    $acl = 'public-read';
    $expires = '+10 minutes';
    $formInputs = [
     'acl' => $acl,
     'key' => $prefix . $filename,
    $options = [
     ['acl' => $acl],
     ['bucket' => $bucket],
     ['starts-with', '$key', $prefix],
    $postObject = new PostObjectV4($client, $bucket, $formInputs, $options, $expires);
    $attributes = $postObject->getFormAttributes();
    $inputs = $postObject->getFormInputs();
    return response(['attributes' => $attributes, 'inputs' => $inputs, 'url' => $attributes['action'] . '/' . $directory . '/' . $filename]);

    So let me explain what’s happening in the above code. From my frontend I am going to make a post request which would contain the name of the file (just as it would be in my s3 bucket and also the folder where it’s going to be saved since my files are going to be saved in different folders. I get my s3 configurations from the env file use s3 file configuration in the config/filesystem.php file. The rest are self explanatory I hope. The $attributes contains information like the form action which is going to look like https://your-bucket-url. Yours won’t necessary have a directory of course. The ‘url’ in my return is what I intend to save in my database once my upload is successful and it would look like this https://bucket-url/directory/filename. With this you will be able successfully generate a presigned POST.

    Next create a post route that points to the controller. Since I am making use of Lumen my route looks like this

    $router->post(‘uploads/store’, ‘MyController@upload’);

    Next we’ll dive into the frontend part where we’ll be submitting a form with the detailed generated above.

    In my Nuxt file I created a component S3FileUploads.vue that looked like this

    I am going to attach screenshots instead for some codes.

    I have a computed property which basically returns the file extension

    computed property get file extension

    I also have a method for generating random strings

    random string generator

    I like to have a general file or files where my endpoints are. It makes it easier to make changes. So I have an endpoint which points to the controller that generates the presigned post for me.

    And then I have my upload file method. The first part of this method involved me trying to generate a unique name for my files and

    There was an issue I encountered while trying send the file to my s3 with axios. My header already contained an Authorization token which made the s3 reject the request, and I couldn’t remove the Authorization because of course I can’t access the backend if my request doesn’t contain the token. So removing it wasn’t an option. Th alternative for me was to use the fetch

    Of course there were other things I did like store the file url to the database if the upload was successful. That’s basically it. Feel free to ask any questions, I’ll try to reply them, and I’d really appreciate those claps too. Thanks for reading

    Continue Reading

    How to Integrate Flutterwave Rave Payment System in your Laravel Applications




    DEVELOPER PROGRAMMING: How to Integrate Flutterwave Rave Payment System in your Laravel Applications [New  Developer Programming] » Naijacrawl
    Photo: Naijacrawl

    Hi Folks, I know many laravel developers that have been using Paystack as their payment system have been finding it difficult to integrate Paystack Laravel Package from Laravel 6.0 - 7.0 versions. Today I have a beautiful solution by using Flutterwave Rave Payment System, this process will work on any laravel versions.


    1. Running Exiting Project on Laravel
    2. Create Account on Flutterwave
    3. Then you are good to go

    Lets Begin

    composer require kingflamez/laravelrave

    Once Flutterwave Rave for Laravel is installed, you need to register the service provider. Open up config/app.php and add the following to the providers key.

    'providers' => [
     /* * Package Service Providers... */

    Also add this to the aliases

    'aliases' => [
    'Rave' => KingFlamez\Rave\Facades\Rave::class, 


    Publish the configuration file using this command:

    php artisan vendor:publish


    Open your .env file and add your public key, secret key, environment variable and logo url like so:

    • RAVE_PUBLIC_KEY - This is the api public key gotten from your dashboard (compulsory)
    • RAVE_SECRET_KEY - This is the api secret key gotten from your dashboard (compulsory)
    • RAVE_TITLE - This is the title of the modal (optional)
    • RAVE_ENVIRONMENT - This can be staging or live. Staging API keys can be gotten here while live API keys can be gotten here (compulsory)
    • RAVE_LOGO - This is a custom logo that will be displayed on the modal (optional)
    • RAVE_PREFIX - This is a the prefix added to your transaction reference generated for you (optional)
    • SECRET_HASH - This is the secret hash for your webhook, this is necessary if you are setting up a recurrent payment

    1. Setup Routes

    Route::post('/pay', 'RaveController@initialize')

    2. Grant CSRF Access to Rave Callback

    Go to app/Http/Middleware/VerifyCsrfToken.php 

    and add your callback url to the $except array

    protected $except = [ 'rave/callback'];

    A sample form from your frontend will look like so:

    $array = array(array(
    'metaname' => 'color',
     'metavalue' => 'blue'),
     array('metaname' => 'size',
     'metavalue' => 'big'));
    "POST" action="{{ route('pay') }}" id="paymentForm"> {{ csrf_field() }} type="hidden" name="amount" value="500" />type="hidden" name="payment_method" value="both" />type="hidden" name="description" value="Beats by Dre. 2017" />type="hidden" name="country" value="NG" />type="hidden" name="currency" value="NGN" />type="hidden" name="email" value="" />type="hidden" name="firstname" value="Oluwole" />type="hidden" name="lastname" value="Adebiyi" />type="hidden" name="metadata" value="{{ json_encode($array) }}" >type="submit" value="Buy" />

    In this implementation, we are expecting a form encoded POST request to this script. The request will contain the following parameters.

    • payment_method Can be card, account, both
    • description Your transaction description
    • logo Your logo url
    • title Your transaction title
    • country Your transaction country
    • currency Your transaction currency
    • email Your customer's email
    • firstname Your customer's firstname
    • lastname Your customer's lastname
    • phonenumber Your customer's phonenumber
    • ref Your transaction reference.
    • It must be unique per transaction.
    • By default, the Rave class generates
    • a unique transaction reference for each
    • transaction. Pass this parameter only if
    • you uncommented the related section in
    • the script below.

    3. Setup your Controller

    Setup your controller to handle the routes. I created the RaveController.

    Use the Rave facade.


    use Illuminate\Http\Request;
    //use the Rave Facadeuse Rave;class RaveController extends Controller{ 
    /** * Initialize Rave payment process * @return void */ 
    public function initialize() {
     //This initializes payment and redirects to the payment gateway 
    //The initialize method takes the parameter of the redirect URL
    /** * Obtain Rave callback information 
    * @return void */public function callback() {
     $data =Rave::verifyTransaction(request()->txref);
    // view the data response 
     if ($data->status == 'success') {
     //do something to your database
    //return invalid payment

    Continue Reading

    Laravel Absolute Beginners Masterclass




    DEVELOPER PROGRAMMING: Laravel Absolute Beginners Masterclass [New  Developer Programming] » Naijacrawl
    Photo: Naijacrawl

    Hi, folks you are welcome to laravel absolute beginner masterclass, if you are here to learn how laravel works, I will recommend you to visit laravel website here but if you are here to use laravel build a product, you are very welcome. Laravel is a PHP Framework

    What is a Framework?

    Before I dive into explaining Laravel, you will need to understand what is a framework. In general, a Framework is a set of conceptual structure and guidelines, used to build a useful product without so much stress.

    What Laravel 

    Laravel is a web application framework with an expressive, elegant syntax which aims to make the development process a pleasing one for the developer without sacrificing application functionality. Laravel follows the MVC (Model View Controller) structure which makes it easy to learn and rapidly prototype the web applications


    1. PHP version from 7.2.5 and above
    2. Composer
    3. I will make use of latest laravel version 7.13 for this

    How to Install PHP

    Visit this link to download Xampp for your PHP, download based on your OS and install it.

    How to install Composer

    Visit this link to download composer for your OS, for window user click here, After downloading install the composer, you need to select the path for your PHP, the composer will alert you during the installation on windows.

    To check if your PHP and composer are successfully installed, open your command (cmd) and type PHP -v, you will see a screen like this

    PHP 7.3.5 (cli) (built: May 1 2019 13:17:17) ( ZTS MSVC15 (Visual C++ 2017) x64 )

    Copyright (c) 1997-2018 The PHP Group

    Zend Engine v3.3.5, Copyright (c) 1998-2018 Zend Technologies

    Check for composer type on your cmd composer, a list of a variable will appear on the screen

    Laravel Installation Completion

    Laravel utilizes Composer to manage its dependencies. So, before using Laravel, make sure you have Composer installed on your machine.

    First, download the Laravel installer using Composer:

    composer global require laravel/installer

    Creating a new project using - Create-Project

    1. first, go to your composer, the local disk you will see xampp -> htdocs-> create a new folder, right on the folder by holding shift + right click and follow the step below
    2. Install Laravel by issuing the Composer create-project command in your terminal:
    composer create-project --prefer-dist laravel/laravel SampleSite

    You have successfully installed your first project using laravel.

    Continue Reading