ryssbowh

ryssbowh

Member Since 1 Year Ago

Experience Points
2,500
Total
Experience

2,500 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
23
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.

Level 1
2,500 XP
Sep
26
1 month ago
Activity icon

Replied to Enhance Route Model Binding

I see,

Seems I didn't have a clear idea of what I wanted to do myself :) I wasn't trying to bind one slug to one instance of a model, but one slug to one class name, which is achievable by doing something like this :

route

\Route::get('{model_slugs}', '[email protected]');

provider

\ModelRoutes::registerModelSlug('articles', Article::class);

\Route::bind('model_slugs', function($value){
    return \ModelRoutes::getModelFromSlug($value);
});

ModelRoutes

function registerModelSlug($slug, $class)
{
    $this->modelSlugs[$slug] = $class;
}

function getModelFromSlug($slug)
{
    return $this->modelSlugs[$slug];
}

controller

public function index($class){}

Not too sure it's a good idea looking at it now, but I'll give it a go.

Thank you all

Activity icon

Replied to Enhance Route Model Binding

Thanks for your answer,

I don't see how it's related though ?

That would resolve my controller through the container, I'm looking for a way to resolve a slug within a route.

Or am I missing something really obvious ?

Sep
16
1 month ago
Activity icon

Started a new Conversation Enhance Route Model Binding

Hi,

I'm looking for ideas (if this is even possible) on how to bind a route slug to a class name with Laravel.

I know how to use the route binding in uris like /article/{article} with the \Route::model method, what I would like to do is to be able to bind the slug {articles} to the model Article (as a class name).

I managed to make this work by binding articles manually :

\Route::bind('articles', function(){
    return Article::class;
});

and retrieve it in my controller with \Route::getBindingCallback('articles')(), but I'd like to automatise this so the bindings appears in the parameters array of the Route class.

what I'm trying to create here is a generic controller for models that handles basic CRUD operations, so it's quite important that the controller doesn't need to know which slug it's looking for, could be articles, users, whatever, therefore the need to automatise it.

I suppose there's 2 parts :

  • bind the string {articles} to the Article model through a new Router method models for example, this should be quite straightforward by overriding the Router class.
  • resolve the string when a route is hit and add the Article class to the route parameters, this I have no idea how to do

Any ideas welcomed, even a detailed tutorial on how Laravel handles routing would be great. Or any other ways you can think of.

Thanks a lot

Sep
01
2 months ago
Activity icon

Replied to Model Events Priorities

Thanks, will definitly get to that in the future, but for now I managed to make this work with a (not amazing) solution, by adding an observable event. Not too happy about overriding the constructor, but at least my classes that use this trait won't need to implement anything, apart from subscribing to the event.

If that can help anyone :

trait EntityBundle
{
    public function __construct(array $attributes = [])
    {
        parent::__construct($attributes);
        $this->addObservableEvents(['bundleCreated']);
    }

    public static function bootEntityBundle()
    {
        self::created(function (EntityBundleContract $model) {
            $bundle = new EntityBundleModel([
                'name' => $model->bundleName()
            ]);
            $model->bundle()->save($bundle);
            $model->fireBundleCreatedEvent();
        });
        
    }

    public function fireBundleCreatedEvent()
    {
        $this->fireModelEvent('bundleCreated');
    }
Activity icon

Replied to Model Events Priorities

Yes I'm starting to realise this :D

I don't really want to put everything in one place, ideally a trait would bring features that classes that use it do not need to put up with.

Will have a look at observers and custom events yes it looks like it's the way to go here

Activity icon

Replied to Model Events Priorities

Thanks for your answer,

No I can't do this because the trait needs the model to have an id in order to set the relation (morphOne) :

trait EntityBundle
{

    public static function bootEntityBundle()
    {
        self::creating(function (EntityBundleContract $model) {
            $bundle = new EntityBundleModel([
                'name' => $model->bundleName()
            ]);
            $model->bundle()->save($bundle); //MorphOne relation, fails at saving as $model doesn't have an id
        });
    }

    public function bundle(): MorphOne
    {
        return $this->morphOne(EntityBundleModel::class, 'instance');
    }
}

The $bundle here is the object the model event needs to exist.

If I don't save the EntityBundleModel there and do a simple $model->bundle = $bundle, it fails at saving my model and considers '$model->bundle' as a normal attribute.

Think I'm gonna have to throw a custom event when $bundle is created.

Activity icon

Started a new Conversation Model Events Priorities

Hi,

Is there a way to assign priorities to events in Laravel ? Something like saying to an event 'You go first before any other event'

I've got a "created" event on a model that uses a trait that also register a "created" event at booting. My problem is that the event of the trait is executed after the event of the model, and in this particular situation it causes the model event to fail (the model event expects a relation to be set but it's not because that relation is set in the trait event).

So I would need the trait event to be executed before the model event.

Any idea how I could achieve that ?

Thanks !

Jun
24
4 months ago
Activity icon

Started a new Conversation Mix And Module Architecture

Hi all,

Looking for advices for a problem I've been having for quite some time now, hope somebody can share some lights on this :

I'm trying to build an application that has several modules (thanks to https://nwidart.com/laravel-modules/v4/introduction) in their own folder, and themes, in their own folders too. Each of those define js and css that can be included at runtime or not (if the module/theme isn't used for that application/route). So far I had one webpack file for each module/theme and a root webpack file including them all and building the assets into the public directory, one file per module/theme, and the module/theme responsible for loading their assets at runtime. I had a command to merge all package.json and libraries were shared in the root node_modules folder.

It works ok in development but I'd like to take it a step further and automatize the thing so I can add modules/themes (through an UI or composer or whatever) without having to rebuild assets locally.

I could have my assets already compiled in each theme/module but then it would mean having the module's assets being compiled without any knowledge of other modules, it would make sense I suppose, but I loose the ability to extract whatever external libraries a module could use. What if I have 2 modules/themes that require the same external library ? this library would be loaded 2 times, it doesn't work either.

So should I look at building assets on the spot when a module is added (through php, is that possible ?). Each module would have its node dependencies copied at development in its folder. Does that sound possible/logical ? Or am I just dreaming here and I do have to load a library two times if two modules need it ? Or anything else I could look at ?

Thanks a lot for your time.