1. Go to this page and download the library: Download bssd-ltd/laravel-aspect 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/ */
namespace App\Modules;
use Bssd\LaravelAspect\Modules\CacheableModule as PackageCacheableModule;
/**
* Class CacheableModule
*/
class CacheableModule extends PackageCacheableModule
{
/** @var array */
protected $classes = [
\YourApplication\Services\SampleService::class
];
}
namespace YourApplication\Services;
use Bssd\LaravelAspect\Annotation\Cacheable;
class SampleService
{
/**
* @Cacheable(cacheName="testing1",key={"#id"})
*/
public function action($id)
{
return $this;
}
}
use Bssd\LaravelAspect\AspectManager;
use Bssd\LaravelAspect\AnnotationManager;
use Bssd\LaravelAspect\AspectServiceProvider as AspectProvider;
/**
* Class AspectServiceProvider
*/
final class AspectServiceProvider extends AspectProvider
{
/**
* {@inheritdoc}
*/
public function register()
{
$this->app->configure('ytake-laravel-aop');
$this->app->singleton('aspect.manager', function ($app) {
$annotationConfiguration = new AnnotationConfiguration(
$app['config']->get('ytake-laravel-aop.annotation')
);
$annotationConfiguration->ignoredAnnotations();
// register annotation
return new AspectManager($app);
});
}
}
$app->register(App\Providers\AspectServiceProvider::class);
if ($app->runningInConsole()) {
$app->register(Bssd\LaravelAspect\ConsoleServiceProvider::class);
}
use Bssd\LaravelAspect\Annotation\Transactional;
/**
* @Transactional("master")
*/
public function save(array $params)
{
return $this->eloquent->save($params);
}
use Bssd\LaravelAspect\Annotation\Transactional;
/**
* @Transactional({"master", "second_master"})
*/
public function save(array $params)
{
$this->eloquent->save($params);
$this->query->save($params);
}
use Bssd\LaravelAspect\Annotation\Transactional;
/**
* @Transactional(expect="\QueryException")
*/
public function save(array $params)
{
$this->eloquent->save($params);
$this->query->save($params);
}
use Bssd\LaravelAspect\Annotation\Transactional;
/**
* @Transactional(expect={"\QueryException", "\RuntimeException"})
*/
public function save(array $params)
{
$this->eloquent->save($params);
$this->query->save($params);
}
use Bssd\LaravelAspect\Annotation\Cacheable;
/**
* @Cacheable(cacheName="testing1",key={"#id","#value"})
* @param $id
* @param $value
* @return mixed
*/
public function namedMultipleKey($id, $value)
{
return $id;
}
use Bssd\LaravelAspect\Annotation\CacheEvict;
/**
* @CacheEvict(cacheName="testing",tags={"testing1"},allEntries=true)
* @return null
*/
public function removeCache()
{
return null;
}
use Bssd\LaravelAspect\Annotation\CachePut;
/**
* @CachePut(cacheName={"testing1"},tags="testing1")
*/
public function throwExceptionCache()
{
return 'testing';
}
use Bssd\LaravelAspect\Annotation\Loggable;
class AspectLoggable
{
/**
* @Loggable
* @param null $id
* @return null
*/
public function normalLog($id = null)
{
return $id;
}
}
use Bssd\LaravelAspect\Annotation\LogExceptions;
class AspectLoggable
{
/**
* @LogExceptions
* @param null $id
* @return null
*/
public function dispatchLogExceptions()
{
return $this->__toString();
}
}
use Bssd\LaravelAspect\Annotation\QueryLog;
use Illuminate\Database\ConnectionResolverInterface;
/**
* Class AspectQueryLog
*/
class AspectQueryLog
{
/** @var ConnectionResolverInterface */
protected $db;
/**
* @param ConnectionResolverInterface $db
*/
public function __construct(ConnectionResolverInterface $db)
{
$this->db = $db;
}
/**
* @QueryLog
*/
public function multipleDatabaseAppendRecord()
{
$this->db->connection()->statement('CREATE TABLE tests (test varchar(255) NOT NULL)');
$this->db->connection('testing_second')->statement('CREATE TABLE tests (test varchar(255) NOT NULL)');
$this->db->connection()->table("tests")->insert(['test' => 'testing']);
$this->db->connection('testing_second')->table("tests")->insert(['test' => 'testing second']);
}
}
use Bssd\LaravelAspect\Annotation\PostConstruct;
class Something
{
protected $abstract;
protected $counter = 0;
public function __construct(ExampleInterface $abstract)
{
$this->abstract = $abstract;
}
/**
* @PostConstruct
*/
public function init()
{
$this->counter += 1;
}
/**
* @return int
*/
public function returning()
{
return $this->counter;
}
}
use Bssd\LaravelAspect\Annotation\RetryOnFailure;
class ExampleRetryOnFailure
{
/** @var int */
public $counter = 0;
/**
* @RetryOnFailure(
* types={
* LogicException::class,
* },
* attempts=3,
* ignore=Exception::class
* )
*/
public function ignoreException()
{
$this->counter += 1;
throw new \Exception;
}
}
use Bssd\LaravelAspect\Annotation\EagerQueue;
use Bssd\LaravelAspect\Annotation\LazyQueue;
use Bssd\LaravelAspect\Annotation\Loggable;
use Bssd\LaravelAspect\Annotation\MessageDriven;
/**
* Class AspectMessageDriven
*/
class AspectMessageDriven
{
/**
* @Loggable
* @MessageDriven(
* @LazyQueue(3),
* onQueue="message"
* )
* @return void
*/
public function exec($param)
{
echo $param;
}
/**
* @MessageDriven(
* @EagerQueue
* )
* @param string $message
*/
public function eagerExec($message)
{
$this->logWith($message);
}
/**
* @Loggable(name="Queued")
* @param string $message
*
* @return string
*/
public function logWith($message)
{
return "Hello $message";
}
}