PHP code example of rentpost / doctrine-multi-tenancy
1. Go to this page and download the library: Download rentpost/doctrine-multi-tenancy library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
rentpost / doctrine-multi-tenancy example snippets
use Doctrine\ORM\Configuration;
use Doctrine\DBAL\Connection;
use App\Adapter\Doctrine\ORM\MultiTenancy\ContextProvider; // Your namespace for ContextProviders
use App\Adapter\Doctrine\ORM\MultiTenancy\ValueHolder; // Your namespace for ValueHolders
use Rentpost\Doctrine\MultiTenancy\Listener as MultiTenancyListener;
$connection = Connection($dbalParams, new MySQLDriver())
$config = new Configuration();
...
$eventManager = $connection->getEventManager();
// Instantiate the MultiTenancy\Listener
$multiTenancyListener = new MultiTenancyListener();
// Now add any ValueHolders you wish to use
$multiTenancyListener->addValueHolder(new ValueHolder\Company());
$multiTenancyListener->addValueHolder(new ValueHolder\User());
$multiTenancyListener->addValueHolder(new ValueHolder\Role());
// And any contexts you may wish to use
$multiTenancyListener->addContextProvider(new ContextProvider\Admin();
$multiTenancyListener->addContextProvider(new ContextProvider\Manager());
$multiTenancyListener->addContextProvider(new ContextProvider\Guest();
// Subscribe the listener to the EventManager now
$eventManager->addEventSubscriber($multiTenancyListener);
// Add the filter to the EntityManager config
$config->addFilter('multi-tenancy', 'Rentpost\Doctrine\MultiTenancy\Filter');
$entityManager = EntityManager::create($connection, $config, $eventManager);
// Lastly, you need to be sure you've enabled the filter
$entityManager->getFilters()->enable('multi-tenancy');
public function getIdentifier(): string;
public function getValue(): ?string;
public function getIdentifier(): string;
public function isContextual(): bool;
use Doctrine\ORM\Mapping as ORM;
use Rentpost\Doctrine\MultiTenancy\Attribute\MultiTenancy;
#[ORM\Entity]
#[MultiTenancy(filters: [
new MultiTenancy\Filter(where: '$this.company_id = {companyId}'),
])]
class Product
{
// Whatever
}
use Doctrine\ORM\Mapping as ORM;
use Rentpost\Doctrine\MultiTenancy\Attribute\MultiTenancy;
#[ORM\Entity]
#[MultiTenancy(filters: [
new MuiltiTenancy\Filter(where: '$this.company_id = {companyId}'),
new MultiTenancy\Filter(
context: ['visitor'],
where: '$this.id IN(
SELECT product_id
FROM product_group
WHERE status = 'published'
)'
),
])]
class Product
{
// Whatever
}
use Doctrine\ORM\Mapping as ORM;
use Rentpost\Doctrine\MultiTenancy\Attribute\MultiTenancy;
#[ORM\Entity]
#[MultiTenancy(
strategy: MultiTenancy\FilterStrategy::FirstMatch,
filters: [
new MuiltiTenancy\Filter(
context: ['admin']
where: '$this.company_id = {companyId}'),
new MultiTenancy\Filter(
context: ['other'],
ignore: true,
),
new MultiTenancy\Filter(
context: ['visitor'],
where: '$this.id IN(
SELECT product_id
FROM product_group
WHERE status = 'published'
)'
),
],
)]
class Product
{
// Whatever
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.