Page 1 of 1

Using Route_Action server event (v2021)

Posted: Wed Oct 21, 2020 11:14 am
by arbei

In pre-v2021 versions, the generated application was file based, if you wanted to add a custom page, you added a Custom File so you can access, e.g. /mypage.php. In v2021, routing is used, if you want a page with header and footer, you can still use Custom File with Include common files enabled so that PHPMaker will generate a route, e.g. /mypage. However, if you just want to do an action on the server side and return the result (as text or JSON) without the layout (and other HTML), now there is an alternative way (and simpler way, depending on your usage), you can use the new Route_Action and/or Api_Action server event to add routes and/or API actions with or without parameters, e.g. in Route_Actions server event

$app->get('/books/{id}', function ($request, $response, array $args) {
$name = ExecuteScalar("SELECT name FROM books WHERE id = " . AdjustSql($args['id'])); // Get book info by $args['id'], here assume id is integer
$response->getBody()->write($name); // Write to response body
return $response; // Return the response
});

If you want to return JSON, read Returning JSON.

Also See How to create routes.


Re: Using Route_Action server event (v2021)

Posted: Mon Jan 09, 2023 5:30 am
by riverman

Thank you for pointing me in right direction!

Did some testing and that works great!

But when I need to generate a Word doc with PHPOffice and uses the keyword USE inside the function I get problems (Should be in the beginning of file). How, with PHPmaker and routes, do I handle that?


Re: Using Route_Action server event (v2021)

Posted: Mon Jan 09, 2023 10:52 am
by arbei

You may use fully qualified name, see Using namespaces: Basics.


Re: Using Route_Action server event (v2021)

Posted: Mon Jan 09, 2023 4:37 pm
by riverman

Thanks again for teaching me the basics!

If anybody else with my lack of knowledge in namespaces; this is what I did:

Instead of using the following:

use PhpOffice\PhpWord\Style\Paper;
use PhpOffice\PhpWord\Style\Language;
use PhpOffice\PhpWord\Writer\Word2007\Style\Font;

I have to write the full qualified name when using the functions in PhpOffice like this:

$phpWord = new \PhpOffice\PhpWord\PhpWord()
$paper = new \PhpOffice\PhpWord\Style\Paper();

Also the constants f.ex language needs the full qualified name:

\PhpOffice\PhpWord\Style\Language::SV_SE

So moving from separate php-file into routes when creating phpword documents I did this:

Server Events->Global->All pages -> Route_Actions

$app->get('/createdoc/{id}', function ($request, $response, array $args) {
        $phpWord = new \PhpOffice\PhpWord\PhpWord();
        $paper = new \PhpOffice\PhpWord\Style\Paper();
        $phpWord->getSettings()->setThemeFontLang(new \PhpOffice\PhpWord\Style\Language(\PhpOffice\PhpWord\Style\Language::SV_SE));
	// ...
	// Do all stuff about the same and end with this:
        $response->getBody()->write(''); // Write an empty response body so you don't interfere with the creation of the Word document.
        return $response; // Return the response 
    });

At least this worked for me, perhaps it can be made more neat but it works!