Skip to content

Entry Points

Entry points offer distinct access routes to the application, each serving different functions apart from the REST API.

Entry points are accessed by the following URL: https://your-site-url?entryPoint={entryPointName}. Note that entryPointName must start with a lower case letter.

Usage examples:

  • file downloading;
  • rendering a web form that does not require authentication.

Entry point classes are located in Espo\Module\{ModuleName}\EntryPoint namespace.

Creating entry point

Assuming that our module is named ModuleName.

Create a file custom/Espo/Custom/Modules/ModuleName/EntryPoints/MyEntryPoint.php:

<?php
namespace Espo\Modules\ModuleName\EntryPoints;

use Espo\Core\Api\Request;
use Espo\Core\Api\Response;
use Espo\Core\EntryPoint\EntryPoint;
use Espo\Core\EntryPoint\Traits\NoAuth;

class MyEntryPoint implements EntryPoint
{
    // Allows access without authentication.
    use NoAuth;

    public function __construct(
        // Pass needed dependencies.
    ) {}

    public function run(Request $request, Response $response): void
    {
        // Entry point logic.
    }
}

Then, clear cache.

The entry point will run on calling https://your-site-url?entryPoint=myEntryPoint.

Frontend rendering

It's possible to render the frontend and call a specific controller action from an entry point.

<?php
namespace Espo\Modules\ModuleName\EntryPoints;

use Espo\Core\Api\Request;
use Espo\Core\Api\Response;
use Espo\Core\EntryPoint\EntryPoint;
use Espo\Core\EntryPoint\Traits\NoAuth;
use Espo\Core\Utils\Client\ActionRenderer;

class MyEntryPoint implements EntryPoint
{
    use NoAuth;

    public function __construct(
        private ActionRenderer $actionRenderer,
    ) {}

    public function run(Request $request, Response $response): void
    {
        $params = ActionRenderer\Params
            ::create('modules/my-module/controllers/my-controller', 'myAction')
            ->withData(['key' => 'value']);

        $this->actionRenderer->write($response, $params);
    }
}