shadrix

shadrix

Member Since 1 Year Ago

Experience Points 49,350
Experience Level 10

650 experience to go until the next level!

In case you were wondering, you earn Laracasts experience when you:

  • Complete a lesson — 100pts
  • Create a forum thread — 50pts
  • Reply to a thread — 10pts
  • Leave a reply that is liked — 50pts
  • Receive a "Best Reply" award — 500pts
Lessons Completed 445
Lessons
Completed
Best Reply Awards 0
Best Reply
Awards
  • start-engines Created with Sketch.

    Start Your Engines

    Earned once you have completed your first Laracasts lesson.

  • first-thousand Created with Sketch.

    First Thousand

    Earned once you have earned your first 1000 experience points.

  • 1-year Created with Sketch.

    One Year Member

    Earned when you have been with Laracasts for 1 year.

  • 2-years Created with Sketch.

    Two Year Member

    Earned when you have been with Laracasts for 2 years.

  • 3-years Created with Sketch.

    Three Year Member

    Earned when you have been with Laracasts for 3 years.

  • 4-years Created with Sketch.

    Four Year Member

    Earned when you have been with Laracasts for 4 years.

  • 5-years Created with Sketch.

    Five Year Member

    Earned when you have been with Laracasts for 5 years.

  • school-session Created with Sketch.

    School In Session

    Earned when at least one Laracasts series has been fully completed.

  • welcome-newcomer Created with Sketch.

    Welcome To The Community

    Earned after your first post on the Laracasts forum.

  • full-time-student Created with Sketch.

    Full Time Learner

    Earned once 100 Laracasts lessons have been completed.

  • pay-it-forward Created with Sketch.

    Pay It Forward

    Earned once you receive your first "Best Reply" award on the Laracasts forum.

  • subscriber-token Created with Sketch.

    Subscriber

    Earned if you are a paying Laracasts subscriber.

  • lifer-token Created with Sketch.

    Lifer

    Earned if you have a lifetime subscription to Laracasts.

  • lara-evanghelist Created with Sketch.

    Laracasts Evangelist

    Earned if you share a link to Laracasts on social media. Please email [email protected] with your username and post URL to be awarded this badge.

  • chatty-cathy Created with Sketch.

    Chatty Cathy

    Earned once you have achieved 500 forum replies.

  • lara-veteran Created with Sketch.

    Laracasts Veteran

    Earned once your experience points passes 100,000.

  • 10k-strong Created with Sketch.

    Ten Thousand Strong

    Earned once your experience points hits 10,000.

  • lara-master Created with Sketch.

    Laracasts Master

    Earned once 1000 Laracasts lessons have been completed.

  • laracasts-tutor Created with Sketch.

    Laracasts Tutor

    Earned once your "Best Reply" award count is 100 or more.

  • laracasts-sensei Created with Sketch.

    Laracasts Sensei

    Earned once your experience points passes 1 million.

  • top-50 Created with Sketch.

    Top 50

    Earned once your experience points ranks in the top 50 of all Laracasts users.

16 Jul
6 days ago
15 Jul
1 week ago

shadrix started a new conversation What Kind Of Browser/App Is This? (Showing Responsive Devices As A Browser)

I'm watching a Tailwind video and saw this:

image

Do you know what this could be?

Original source is from here: https://tailwindcss.com/course/responsive-design/

26 Jun
3 weeks ago

shadrix commented on Go Go Gadget Tailwind

Ha nice. I'm first writing with the new comment feature :D

24 Jun
4 weeks ago

shadrix left a reply on Why Does Laravel Notifications Table Use UUID Instead Of ID?

I like the question @thebigk . Just to add something for people who don't know it. If you are still using normal IDs, but you want to hide your information what @cronix is referring, you could use HashIds. It converts numbers like 347 into strings like “yr8”.

21 Jun
1 month ago

shadrix left a reply on How To Avoid Interface Segregation In My Case? (SOLID)

@DRFRAKER - Thanks for your suggestion. But I cannot do that. Why? Because we cannot create a new instance. Internally we don't know what is "coming" to us.

Just to give a real-life example and unfortunately the long version.

 $invoice->create(new InvoiceFoodBuyer($event->order));
 $invoice->create(new InvoiceFoodSeller($event->order));

Invoice is created for Buyer and for Seller. InvoiceFoodBuyer implements A and B Interfaces.

Inside of $invoice->create

We have a function that creates PDFs.

 (new InvoicePDF($invoiceType))->createPdf();

$invoiceType should implement B interfaces,

However everything in $invoice->create() should implement A interfaces...

20 Jun
1 month ago

shadrix started a new conversation How To Avoid Interface Segregation In My Case? (SOLID)

Hey hey :)

I'm trying to use the SOLID-principles, however, I have a problem with Type-Hinting.

First, have a look at my code.

public function create(AInterface $a): void
{
  ...
  $class = new SuperClass($a); //---> here is the problem, it wants BInterface, not AInterface
  ..
}

$a implements AInterface and BInterface.

For the first create method, we just care about the AInterface-Methods

Inside of SuperClass we just care about the BInterface-Methods

However, my intelephense writes, that the type is wrong.

Currently, I just merged AInterface and BInterface together, but Interface Segregation states that we should not force to use a method when not used.

How would you do this?

I've looked it up and some solutions are using a third interface, extending AInterface and BInterface.

15 Mar
4 months ago

shadrix left a reply on How To Delay A Job For Next Week?

@nash yeah I wanted to avoid this, to set up an extra task only for those two little mails... but thanks anyways. I have to think about it.

shadrix started a new conversation How To Delay A Job For Next Week?

Currently, I'm sending emails with "later()" to delay the time dynamically let's say next week. However, I have some edge cases where sometimes I'm not allowed to send the mail.

For that, I want to use a job to check if I should send the mail.

Two questions:

  • What is the maximum of delay time? (I only see: "The Amazon SQS queue service has a maximum delay time of 15 minutes.")

  • And one post mentioned this:

    $date = Carbon::now()->addMinutes(20160);

    Queue::later($date, '[email protected]', array('user' => $user));

but the post was from the year 2014. Can you still queue like this? There is no mention of Queue in the docs...

In the api I see only lateOn

07 Mar
4 months ago

shadrix left a reply on Your Thoughts About Writing Everything In Modules/packages?

@artcore thank you! And the tip with symlink is awesome. Actually, when I think about it, Laravel Nova is doing the same.

06 Mar
4 months ago

shadrix started a new conversation Your Thoughts About Writing Everything In Modules/packages?

Hi guys,

so my app gets quite huge and it is quite difficult to have a good overview.

What do you think, is writing your code in modules a good thing? I just stumbled upon this: https://github.com/nWidart/laravel-modules

I had this thought a long time ago when I saw how Illuminate is written. It is separated in several "modules" that are independent.

Now I wonder if you guys are using this technique in your big projects as well.

Before I found this laravel-modules package, I thought to myself, perhaps you could create for every module an own repository.

Not sure if there are some cons to it.

Thanks & greetings from Germany!

15 Feb
5 months ago

shadrix started a new conversation Big Websites Have Google Login Via "SmartLock", How To Implement This?

There are no stupid questions some say :P However I'm looking to implement this in my website.

[![enter image description here][2]] [2]: https://i.stack.imgur.com/6ljSs.jpg

Do you know where I can infos about this? I cannot find it anywhere. If I look at the source code you see thats an iframe:

<iframe src="https://smartlock.google.com/iframe/request?client=https%3A%2F%2Fmedium.com&amp;id=0aa5c69a970034bf7bc1a2e03b030d4042b6fd17c9e6f6e488ab3c1a9bc7578a&amp;renderMode=navPopout&amp;preloadRequest=%7B%22type%22%3A%22hint%22%2C%22options%22%3A%7B%22supportedAuthMethods%22%3A%5B%22https%3A%2F%2Faccounts.google.com%22%5D%2C%22supportedIdTokenProviders%22%3A%5B%7B%22uri%22%3A%22https%3A%2F%2Faccounts.google.com%22%2C%22clientId%22%3A%22216296035834-k1k6qe060s2tp2a2jam4ljdcms00sttg.apps.googleusercontent.com%22%7D%5D%7D%7D&amp;features=%7B%22feature%22%3A%5B%22DISPLAY_RP_TOS%22%5D%7D" style="border: none; position: fixed; z-index: 9999; top: 0px; right: 0px; width: 400px; height: 261px;"></iframe>

There is only little info about it and only for android and it's not that what I'm looking for

To test it out: Go to medium.com with Chrome and a side-popup should come.

13 Feb
5 months ago

shadrix left a reply on What Is The Best Js Framework To Use With Laravel

You can choose the framework you like, it does not matter. But I would recommend Vue since it's sooo simple to learn and you can do anything with it.

11 Feb
5 months ago

shadrix left a reply on How To Throttle Specific Routes Without X-Ratelimit-Remaining Used Up From Other Routes

@bobbybouwmann thanks, it was quite straight forward, didn't need to change a lot.

For future readers go to ThrottlesLogin, copy it and adjust some things for your needs.

Now everything works fine :)

10 Feb
5 months ago

shadrix left a reply on How To Throttle Specific Routes Without X-Ratelimit-Remaining Used Up From Other Routes

@bobbybouwmann hmm I see. Thank you anyways! As a side note, I cannot set it to 4, because I don't know how many api request the user did before that. So my current idea is to recreate the trait ThrottleLogin, so I can use it for my own purposes.

shadrix started a new conversation How To Throttle Specific Routes Without X-Ratelimit-Remaining Used Up From Other Routes

In my api.php I have my main routes grouped within:

Route::middleware('throttle:60,1')->group(function() { //all my main api routes});

However, I have routes, that need custom times. For example, if the user needs to type his/her password again when he/she changes something in the settings.

//outside of the throttle:60,1
Route::post('/password/check', 'Api\[email protected]')
     ->middleware('throttle:3,1', 'auth:api');

My goal is that the user can only type his/her password 3 times, after that he/she needs to cool down.

However, I noticed that when I fetch URLs from the API the "X-Ratelimit-Remaining" is already used up. This leads to the problem that the user needs to cooldown when the password was typed in.

I wrote a PHPUnit test to prove that there is a bug:

/** @test */
public function throttle_works_correctly_even_when_other_api_url_are_called()
{
    $this->withExceptionHandling();

    $this->otherApiUrl()->assertStatus(200);

    $this->url(['currentPassword' => 'secret'])->assertStatus(200);

    $this->url(['currentPassword' => 'secret'])->assertStatus(200);

    $this->url(['currentPassword' => 'secret'])->assertStatus(200); <-- fails at this part

    $this->url(['currentPassword' => 'secret'])
        ->assertStatus(429);
}

How would you fix this?

shadrix left a reply on Things To Learn

@icelander is the app going to be on mobile apps? then definitely javascript, because I think it's quite easy to learn. There are frameworks that combine it with Vue, so it's quite easy to get an app without the hassle to learn something like swift or c#

26 Jan
5 months ago

shadrix left a reply on Multiple Assets Emit To The Same Filename Bundle.js

Just to add to Mithrandir, your package.json looks for example like this:

"test": "cross-env NODE_ENV=testing mocha-webpack --webpack-config=node_modules/laravel-mix/setup/webpack.config.js --require tests/Vue/setup.js tests/Vue/\\*\\*/\\*.spec.js",

And in webpack

if (process.env.NODE_ENV !== 'testing') {
    mix.extract(); 
}
15 Jan
6 months ago

shadrix left a reply on When To Use Something Like Aws S3?

@ohffs Thanks! Good to know! Btw what about https://www.fastly.com? I found this also interesting and it's up to 50$ for free.

shadrix started a new conversation When To Use Something Like Aws S3?

I finished my project and I'm currently going into the production phase. It's my first big project and I'm trying to learn everything about improving the performance of a webpage. However, it overwhelms me quite a bit... (not really noob friendly)

So when and why would you use services like aws s3?

If you google for that, there obviously pages that make some couple of bucks with it for promoting it. So I cannot really trust their pros&cons.

To explain my project:

A user can sell offers and each offer contains at least one image. I'm going to use DigitalOcean (DO) as a Server. Currently, I think I would save the images with DO Spaces. (it should be the same to s3).

But I'm not quite sure, why you guys are using aws s3 but are using DO as the server.

Thanks!

14 Jan
6 months ago

shadrix left a reply on How To Reduce App.js?

@wilk_randall Ah you are right! I only used mix(['vue'])....

Now with this change it looks like this:

/js/app.js    1.01 MB      33  [emitted]  [big]  /js/app
js/vendor.js    3.75 MB      34  [emitted]  [big]  js/vendor
/js/moment.js  193 bytes      35  [emitted]         /js/moment
/js/canvas.js     1.4 kB      36  [emitted]         /js/canvas
js/manifest.js    2.23 kB      37  [emitted]         js/manifest
/css/app.css     289 kB      33  [emitted]  [big]  /js/app

Thanks for the tip, I'llDo you have any other tips?

shadrix left a reply on How To Reduce App.js?

@wilk_randall I hope you are not a bot :P if you look to the code above you might see /vendor.js and manifest.js. That is why I'm already doing :)

shadrix started a new conversation How To Reduce App.js?

I would love to know your tips on reducing app.js

My current problem is that in development my app.js is about 9mb big. When minified it is still about 3.68mb big.

/js/app.js    3.68 MB      33  [emitted]  [big]  /js/app
/js/moment.js     982 kB      34  [emitted]  [big]  /js/moment
/js/vendor.js    92.2 kB      35  [emitted]         /js/vendor
/js/canvas.js     1.4 kB      36  [emitted]         /js/canvas
/js/manifest.js    2.23 kB      37  [emitted]         /js/manifest
/css/app.css     289 kB      33  [emitted]  [big]  /js/app

I have two ideas how to reduce the .js

  • I could have two .js one for guests and a second for an authenticated user that is loaded additionally -or I could split this for every single page (but I fear this is more of a hassle...

Chrome's audit says that just for "Script Evaluation" it takes 12,237 ms....

Thank you for your tips!

11 Dec
7 months ago

shadrix left a reply on Cannot Log In - Session Not Working In Artisan Serve But In Valet It Does

Maybe for feature readers, I could not fix it, but I made valet share much faster.

First of all I created a free account on ngrok and then with `~/.composer/vendor/laravel/valet/bin/ngrok authtoken <YOUR_AUTHTOKEN>``

You can add your auth token.

So after that you need to specificy your region. Since I'm from Europe it made it super fast.

just write: valet share -region=eu

shadrix left a reply on Cannot Log In - Session Not Working In Artisan Serve But In Valet It Does

@SNAPEY - @snapey you are right but as written above I'm using it to view it on my phone. Since Valet Share goes through ngrok.io it's way slower, because of the "middleman". If I use artisan serveand go through the local network it's super fast.

10 Dec
7 months ago

shadrix started a new conversation Cannot Log In - Session Not Working In Artisan Serve But In Valet It Does

Hey, I don't know why but my session is not working while using php artisan serve --host 0.0.0.0

First I had to remove \App\Http\Middleware\VerifyCsrfToken::class,, but now while debugging on my phone I want to log in and it won't work.

I think my SESSION_DOMAIN is wrong, but I cannot figure it out.

With Laravel Valet my .env looks like this:

APP_URL=http://myproject.test
SESSION_DOMAIN=.myproject.test #using it for subdomains

Now with php artisan serve it's

APP_URL=http://192.168.1.34:8000
SESSION_DOMAIN=192.168.1.34

But I had to remove VerifyCsrfToken because for some reason I get TokenMismatchException.

I don't want to use Laravel Valet Serve because it is so slow...

Any idea why my session is not working?

03 Dec
7 months ago

shadrix started a new conversation Question Towards Access Control List (ACL). Should Be A "normal" User Be A Role?

I'm currently learning about ACL but I'm not quite sure how I should implement it.

My current user migration table looks like this:

Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name')->unique()->nullable();
        $table->string('email')->unique()->nullable();
        $table->string('password')->nullable();
        $table->string('avatar')->nullable();
        $table->boolean('seller')->default(false);
        $table->boolean('confirmed')->default(false);
        ...
});

Now my thought was to remove the last two booleans in favor of the role ACL table.

Some questions I have:

Would you create a role with the name "buyer"? That is the normal user on my platform, where confirmed is set to true and the seller is set to false.

What about "unconfirmed" users? Those who did not confirm the confirmation mail yet? Would you create a role for them as well?

Another question is that how would you define the user factory?

Normally, I would just write:

factory->define(App\User::class, function (Faker $faker) {
   static $password;
  return [
    'name' => $faker->unique()->userName,
    'email' => $faker->unique()->safeEmail,
    'password' => $password?: $password = 'secret',
    'avatar' => $faker->imageUrl(220, 220, 'people'),
    'confirmed' => true,
    'cook' => true,
    ....
 ]
});

How would you attach it when the syntax would be $user->givePermissionTo('create offers');?

Thank you!

######(p.S. sorry about all the questions, normally I would have created more discussions...)

01 Dec
7 months ago

shadrix left a reply on Using Laravel Packages In Nova

The short answer is no.

Normal Laravel Packages need to ship with Laravel Nova Packages so you can use it both (for example with the Laravel Ban package).

You can have a look at https://novapackages.com what packages there are.

30 Nov
7 months ago

shadrix left a reply on Nova Column Not Found - Do I Need ID In My Model?

@sepiksu @realrandyallen it's really hard to choose the best answer here.

I tried the first option from @realrandyallen and added the applyOrderings() method as in the issue described. However, as soon I tried to edit values I run into other issues.

So @sepiksu gets the best answer because I'm going to add the id.

shadrix left a reply on Nova Column Not Found - Do I Need ID In My Model?

@SEPIKSU - @realrandyallen yes you are right! A pity this is not a default option.

shadrix started a new conversation Nova Column Not Found - Do I Need ID In My Model?

So my simple model is not using ID as a column. However, with Nova, it shows me the error:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'unsplash.id' in 'order clause' (SQL: select * fromunsplashorder byunsplash.iddesc limit 26 offset 0)"

My resource looks like this.

` public static $model = 'App\Unsplash';

public static $title = 'city';

public static $search = [
    'city'
];

public function fields(Request $request)
{
    return [
       Text::make('City'),
       Text::make('PhotoId'),
    ];
}`

What to do?

27 Nov
7 months ago

shadrix left a reply on How And Where To Store A Secured API Key (for Example For Algolia)?

@d9705996 Because restricted API keys can be easily attacked if you know how. I just quote from here:

The referrer is an HTTP header that is sent by browsers. Like all HTTP headers, it can be spoofed, so you should not rely on it to secure your data.

So that is why you should do backend and combine it with restricted api.

26 Nov
7 months ago

shadrix left a reply on How And Where To Store A Secured API Key (for Example For Algolia)?

@d9705996 Finally we are getting closer. There are two ways how to secure the api keys. You can combine them. As you have read it's:

-restricted API Keys
-secured API Keys

However, I'm interested in secured API Keys. I want to use my backend to generate the save keys.

After the backend generates the key, I want them to be echoed out in the header.

Like:

<script>
    window.App = {!! json_encode([
       'topSecretKey' => mymagicmethod('algolia')
    ]) !!};
    </script>

shadrix left a reply on How And Where To Store A Secured API Key (for Example For Algolia)?

@d9705996 I really appreciate your help, but I'm a bit confused right now. I'm trying to explain it a bit more what I'm doing.

I implemented Algolia Places with Vue, so I actually cannot use Laravel Scout, since I don't need my backend for this.

At this part in the documentation, Algolia writes that we should secure the api keys.

So that is why I'm here, because I'm not quite sure if the session id is enough and where to put the code.

The goal is just to read the key dynamically out

shadrix left a reply on How And Where To Store A Secured API Key (for Example For Algolia)?

@D9705996 - Sorry, the part of session()->getId() is obvious, but thank you. How ever, where would you save the part of code? still in config/services.php?

shadrix started a new conversation How And Where To Store A Secured API Key (for Example For Algolia)?

So I'm trying to implement this:

//example from the page
$currentUserID = 1; // Replace by the current user ID

$securedApiKey = \AlgoliaSearch\Client::generateSecuredApiKey(
  'YourSearchOnlyApiKey', // Make sure to use a search key
  [
    'filters' => 'viewable_by:'.$currentUserID
  ]
);

However, since the user is not always logged in I don't have a user id. So my guess is just to take the session id, it should work the same right?

But now I'm curious, where should I put this part of code?

My first thought was in config.services. But can it work even though I cache the config?

Should I put it somewhere else?

To fetch the key for the frontend, I'm saving it to window.App.keys

16 Nov
8 months ago

shadrix left a reply on Naming Question: What Is The Appropriate Short Name For BillingSeller?

@aurawindsurfing and @martinbean, sorry for the miscommunication... ?

So I try to explain it. In Order.php I have the relationships seller() and buyer() (or @martinbean's naming scheme is also nice)

However, for each Order, I'm saving the Seller Address + Name data and the Buyer Address + Name data.

I'm using a polymorphic table called addresses to save all kinds of addresses.

To save the addresses of the orders I have two extra models OrderBillingSeller and OrderBillingBuyer. That is important for morphing the right type.

Currently, I'm using the naming scheme:

//in Order.php
public function *****(can't find a good name)()
{
    return $this->hasOne('App\OrderBillingSeller');
}

public function billing()
{
    return $this->hasOne('App\OrderBillingBuyer');
}

I'm not really happy about it, but I associate billing as the invoice/billing for the buyer and for the seller I'm not sure what to use.

Btw thank you for your help nonetheless!

13 Nov
8 months ago

shadrix started a new conversation Naming Question: What Is The Appropriate Short Name For BillingSeller?

Currently, in my Order Table, I've got the relationships billingSeller and billingBuyer.

I would like to change it so that billing is always the buyer data and **** for the seller.

I have no idea how I could name it, do you have any idea?

Thank you!

shadrix left a reply on Relationship HasOne Over Two Tables

@Cronix I know, sorry about that! It was hard for me to decide (not really is it the best answer as I wrote, but I wanted to give it to him so he is more motivated to help others)

12 Nov
8 months ago

shadrix left a reply on Relationship HasOne Over Two Tables

@mekaeil I'm not really happy about that, but I'm going to do it. Thank you for your help

shadrix left a reply on Relationship HasOne Over Two Tables

@CRONIX - I had this before, but I liked the idea of having user_addresses and that's it.

So before that, I had, offer_addresses, billing_addresses, user_addresses, seller_addresses.

shadrix left a reply on Relationship HasOne Over Two Tables

@STAUDENMEIR - I thought the same but how should belongsToMany set the attributes like is_physical, is_billing, is_offer etc?

shadrix left a reply on Relationship HasOne Over Two Tables

@mekaeil because I have sooo many tables that need addresses, like order (billing), offer(pickup address), order(seller_address), user (physical address) etc. I cannot just create a simple users_address table. My tables look similar to this one:

asdf source

shadrix started a new conversation Relationship HasOne Over Two Tables

I'm not sure how to solve this problem:

picture

I have an address table and a user_addresses table.

My goal is to get a relationship like:

public function address() { return $this->hasOne(UserAddress::class) ->where('is_physical', true); }

However, I want to get with $user->address not the UserAddress table but the Address table. And my goal is to write: $user->address()->create(['street_number' => '25c']) so I'm creating the Address table but at the same time I'm creating the UserAddress table and set the `is_physical´to true.

Is this somehow possible?

p.S. sorry about the title, I just don't know how to simplify my problem in a title...

09 Nov
8 months ago

shadrix left a reply on How To Handle A Dummy User To Replace A User?

@martinbean Oh, I forgot about default models! That is cool!

But why would you only soft-delete the record? Why not completely?

shadrix left a reply on How To Handle A Dummy User To Replace A User?

Good morning, thanks for your reply.

The conversations were private between the users? No need to redact one half of the conversation?

Yes, they are private. But since GDPR hit us I'm trying to delete everything that I don't need anymore.

I would leave the record alone, just overwrite the previous user's name with something like 'anon' and make up new values for the other fields.

I think I'm going to do it so. Thanks!

08 Nov
8 months ago

shadrix started a new conversation How To Handle A Dummy User To Replace A User?

I'm not sure how to handle this the correct way.

Let us say we have messages table with dozens of messages from a user in a conversation.

Now, the user decides to leave the website and delete his account. My "goal" is to completely delete the user from the user table (no soft-deleting) and update all relationships in all the tables I have. Especially, the messages table worries me, because it can be quite long.

How would you do this? Do you have one dummy user in the usertable and just update all foreign keys to the dummy user?

24 Oct
8 months ago

shadrix left a reply on Why Is There A <br> When Using Markdown In Email?

Ok, I see now. The difference in render is:

with

Thanks,
my App

and without

Thanks,

my App

Sorry for the question, but at first it showed me everything correctly

shadrix started a new conversation Why Is There A <br> When Using Markdown In Email?

Sorry for the question,

but I wonder. Why is there a in the markdown examples?

Like in https://laravel.com/docs/5.6/mail#markdown-mailables (scroll a bit down)

Example:

Thanks,<br>
{{ config('app.name') }}
@endcomponent

I thought markdown would always single line break after breaking one row.