#resource controller
snippet l_rsc
	/*!
	* \class       $1
	*
	* \author      ${3:`!v g:snips_author`}
	* \date        `!v strftime('%d-%m-%y')`
	*/

	class ${1:`!v expand('%:t:r')`} extends ${2:BaseController} {
		function __construct() {
		}
		
		public function index() {
		}
		
		public function create() {
		}
		
		public function store() {
		}
		
		public function show($id) {
		}
		
		public function edit($id) {
		}
		
		public function update($id) {
		}
		
		public function destroy($id) {
		}
	}
#service service provider
snippet l_ssp
	/*!
	* \namespace   $1
	* \class       $2
	*
	* \author      ${3:`!v g:snips_author`}
	* \date        `!v strftime('%d-%m-%y')`
	*/

	namespace ${1:Services};

	use Illuminate\Support\ServiceProvider;

	class ${2:`!v expand('%:t:r')`} extends ServiceProvider {
		
		public function register() {
			$this->app->bind('${4}Service', function ($app) {
				return new ${5}(
					$app->make('Repositories\\${6}Interface')
				);
			});
		}
	}
#repository service provider
snippet l_rsp
	/*!
	* \namespace   $2
	* \class       $3
	*
	* \author      ${4:`!v g:snips_author`}
	* \date        `!v strftime('%d-%m-%y')`
	*/

	namespace ${2:Repositories\\${1:}};

	use Entities\\$1;
	use $2\\$1Repository;
	use Illuminate\Support\ServiceProvider;

	class ${3:`!v expand('%:t:r')`} extends ServiceProvider {
		/*!
		* \var     defer
		* \brief   Defer service
		*/
		protected $defer = ${5:true};

		public function register() {
				$this->app->bind('$2\\$1Interface', function($app) {
						return new $1Repository(new $1());
				});
		}

		/*!
		* \brief   If $defer == true need this fn
		*/ 
		public function provides() {
				return ['$2\\$1Interface'];
		}
	}
#model
snippet l_md
	/*!
	* \namespace   $1
	* \class       $2
	*
	* \author      ${3:`!v g:snips_author`}
	* \date        `!v strftime('%d-%m-%y')`
	*/

	namespace ${1:Entities};

	class ${2:`!v expand('%:t:r')`} extends \Eloquent {
		protected $table   = '${4:`!p snip.rv = t[2].lower()`}';

		public $timestamps = ${5:false};

		protected $hidden  = array(${6});

		protected $guarded = array(${7:'id'});
	}
#abstract repository
snippet l_ar
	/*!
	* \namespace   $1
	* \class       $2
	* \implements  $3
	*
	* \author      ${4:`!v g:snips_author`}
	* \date        `!v strftime('%d-%m-%y')`
	*/

	namespace ${1:Repositories};

	use Illuminate\Database\Eloquent\Model;

	abstract class ${2:`!v expand('%:t:r')`} implements ${3:BaseRepositoryInterface} {
		protected $model;

		/*!
		* \fn      __construct
		*
		* \brief   Take the model
		*/

		public function __construct(Model $model) {
				$this->model = $model;
		}

		/*!
		* \fn      all
		*
		* \return  Illuminate\Database\Eloquent\Collection
		*/
		public function all($columns = array('*')) {
				return $this->model->all()->toArray();
		}

		/*!
		* \fn      create
		*
		* \return  Illuminate\Database\Eloquent\Model
		*/
		public function create(array $attributes) {
				return $this->model->create($attributes);
		}

		/*!
		* \fn      destroy
		*
		* \return  int
		*/
		public function destroy($ids) {
				return $this->model->destroy($ids);
		}

		/*!
		* \fn      find
		*
		* \return  mixed
		*/
		public function find($id, $columns = array('*')) {
			return $this->model->find($id, $columns);
		}
	}

#repository
snippet l_r
	/*!
	* \namespace   $1
	* \class       $3
	* \implements  $4
	*
	* \author      ${5:`!v g:snips_author`}
	* \date        `!v strftime('%d-%m-%y')`
	*/

	namespace ${1:Repositories\\${2}};

	class ${3:`!v expand('%:t:r')`} extends \\${6} implements ${4:$3RepositoryInterface} {
		${7}
	}
#service
snippet l_s
	/*!
	* \namespace $1
	* \class     $2
	*
	* \author    ${6:`!v g:snips_author`}
	* \date      `!v strftime('%d-%m-%y')`
	*/

	namespace Services\\${1};

	use ${3:Repositories\\${4:Interface}};

	class ${2:`!v expand('%:t:r')`} {
		protected $${5:repo};

		/*!
		* \fn      __construct
		*/
		public function __construct($4 $repo) {
			$this->$5 = $repo;
		}
	}
#facade
snippet l_f
	/*!
	* \namespace   $1
	* \class       $2
	*
	* \author      ${5:`!v g:snips_author`}
	* \date        `!v strftime('%d-%m-%y')`
	*/

	namespace ${1:Services};

	use \Illuminate\Support\Facades\Facade;

	class ${2:`!v expand('%:t:r')`} extends Facade {
		/*!
		* \fn          getFacadeAccessor
		*
		* \return      string
		*/
		protected static function getFacadeAccessor() { return '${4:${3}Service}'; }
	}
