Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[5.x] Support rendering model attributes in Antlers #10869

Open
wants to merge 3 commits into
base: 5.x
Choose a base branch
from

Conversation

ryanmitchell
Copy link
Contributor

This PR ensures Laravel model attributes can be rendered in antlers without having to add them to appends().

This allows you to do things like:

class MyModel extends \Illuminate\Database\Eloquent\Model
{
    public function fooBar(): Attribute
    {
        return Attribute::make(
            get: fn() => 'FooBar',
        );
    }
}
{{ my_model:foo_bar }}

I hope I did this right and @JohnathonKoster approves of the approach.

Closes #7356

@duncanmcclean
Copy link
Member

Niiiice!

@jasonvarga
Copy link
Member

I haven't tested, but just looking at the code it seems that this will only work if you use the new style of attributes. e.g. getSomethingAttribute and doing model:something won't work.

Do we need to be checking if the returned value of the method is an attribute?

If you do {{ model:something }} and we know it's a Model, why not always just do $model->something?

@ryanmitchell
Copy link
Contributor Author

Yeah it’s set to only work with new attributes. Old style would still need added to appends so they appear in toarray.

The runtime parser seems to get the array of data and then get from it so it wouldn’t know what the ‘something’ is. Unless I’m missing that.

@jasonvarga
Copy link
Member

Ah yeah okay I misread what was happening here. I thought it was pulling a single value out but it's really getting all the context data. My mistake.

@ryanmitchell
Copy link
Contributor Author

ryanmitchell commented Oct 1, 2024

Yeah. Your way would be better if I could figure out how to do it.

[edit]: I think the reduce function would need to know what the current 'part' is being checked - feels like a much bigger change. Maybe John can advise.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Model accessors do not work without appending in Antlers
3 participants