Skip to content

Instantly share code, notes, and snippets.

@guicara
Last active January 11, 2017 10:30
Show Gist options
  • Save guicara/ea2a2a94d901fde03a438d5fe234764d to your computer and use it in GitHub Desktop.
Save guicara/ea2a2a94d901fde03a438d5fe234764d to your computer and use it in GitHub Desktop.
Themosis Framework (1.3.0) - How to extends the User class.
<?php
// #######################################################
// htdocs/content/themes/acme/resources/config/theme.config.php
// Replace the default Facade
return [
'aliases' => [
'User' => \Acme\Theme\Facades\User::class,
]
]
// #######################################################
// htdocs/content/themes/acme/resources/facades/User.php
// Define the new Facade
namespace Acme\Theme\Facades;
use Themosis\Facades\Facade;
class User extends Facade
{
/**
* Return the service provider key responsible for the user class.
* The key must be the same as the one used when registering
* the service provider.
*
* @return string
*/
protected static function getFacadeAccessor()
{
return 'model.user';
}
}
// #######################################################
// htdocs/content/themes/acme/resources/models/User.php
// Define the new model
namespace Acme\Theme\Models;
class User extends \Themosis\User\User
{
public function __construct($id = 0)
{
parent::__construct($id);
}
public function getAcme()
{
return 'test';
}
public function bar()
{
echo 'bar';
}
}
// #######################################################
// htdocs/content/themes/acme/resources/factories/UserFactory.php
// Extend the Themosis UserFactory to use our custom model
namespace Acme\Theme\Factories;
use Acme\Theme\Models\User;
class UserFactory extends \Themosis\User\UserFactory
{
/**
* Create a new User instance.
*
* @param int $id
*
* @return User
*/
protected function createUser($id)
{
return new User((int) $id);
}
public function __call($name, $arguments)
{
if (is_callable(['Acme\Theme\Models\User', $name])) {
return call_user_func_array([User::class, $name], $arguments);
}
}
public function foo()
{
return 'foo';
}
}
// #######################################################
// htdocs/content/themes/acme/resources/providers/UserServiceProvider.php
// Register the Service Provider
namespace Acme\Theme\Providers;
use Themosis\Foundation\ServiceProvider;
use Acme\Theme\Factories\UserFactory;
class UserServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind('model.user', function ($container) {
$view = $container['view'];
$view = $view->make('_themosisUserCore');
return new UserFactory($view, $container['validation'], $container['action']);
});
}
}
// htdocs/content/themes/acme/resources/config/providers.config.php
return [
Acme\Theme\Providers\UserServiceProvider::class,
...
];
// #######################################################
// Enjoy
$user = User::current();
$test = User::foo(); // 'foo'
$test2 = User::bar(); // 'bar'
$test3 = $user->getAcme(); // 'acme'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment