GithubHelp home page GithubHelp logo

Comments (4)

jakubmisek avatar jakubmisek commented on June 21, 2024 1

This works with PeachPie in PHP code, because the PeachPie compiler takes care of it. So you can compile this PHP code with PeachPie.

However, PeachPie/C# runtime does not implement dynamic approach yet, so you can't do it from C#.

from peachpie.

jakubmisek avatar jakubmisek commented on June 21, 2024 1

Also, it's not quite a magic method. It's a dynamic property not involving __get or __call.

Magic methods won't work through dynamic in C# either.

We'd have to implement IDynamicMetaObjectProvider.

from peachpie.

luizzaiats avatar luizzaiats commented on June 21, 2024

@jakubmisek thank you for the clarification ;)

I am very interested on using the PHP/C# interop, using PHP objects on C#/Blazor. I already have a small REST API written in PHP using StraightFramework and RedbeanPHP so I'll try to run this REST API (on top of PeachPie) and Blazor making the calls to it over HTTP requests.

Investigating here, I was able to use RedbeanPHP on C# as follow:

ctx.Call("R::setup", "sqlite:./dbfile.db");
            
dynamic _user = ctx.Call("R::dispense", "user");
_user.Object.__set("username", "luiz.zaiats");
            
dynamic _profession = ctx.Call("R::dispense", "profession");
_profession.Object.__set("name", "Programmer");

_user.Object.__set("profession", _profession);

ctx.Call("R::store", _user);

The above code works perfectly, but when I try to load data and update, something is messy on the bean itself not allowing me to update the object:

var users = ctx.Call("R::find", "user");
foreach(var kv in users) {
    RedBeanPHP.OODBBean v = kv.Value.Object as RedBeanPHP.OODBBean;
    Console.WriteLine(v.__get("username"));

    RedBeanPHP.OODBBean p = v.__get("profession").AsObject() as RedBeanPHP.OODBBean;
    Console.WriteLine(p.__get("name"));

    p.__set("name", "Updated Programmer");
    Console.WriteLine(p.__get("name"));

    ctx.Call("R::store", (PhpValue)kv.Value); // this operation throws Unhandled exception. RedBeanPHP\RedException: Identifier does not conform to RedBeanPHP security policies.
}

Congrats for PeachPie, it's an incredible tool for us, PHP programmers out there!

from peachpie.

jakubmisek avatar jakubmisek commented on June 21, 2024

you can simplify a few calls there, if you reference the PHP project from your C# project, i.e.:
ctx.Call("R::setup", "sqlite:./dbfile.db"); ->
R.setup(ctx, "sqlite:./dbfile.db");

and

dynamic _user = ctx.Call("R::dispense", "user");
_user.Object.__set("username", "luiz.zaiats");

->

var user = R.dispense(ctx, "user");
user.__set("username", "luiz.zaiats");

and

RedBeanPHP.OODBBean v = kv.Value.Object as RedBeanPHP.OODBBean ->
var v = kv.Value.Cast<RedBeanPHP.OODBBean>()


anyways; if you have the full stack trace of the "Unhandled exception", we can do something about it

from peachpie.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.