Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace app\support\lib;
- use Illuminate\Http\Request;
- use Illuminate\Http\Response;
- use Illuminate\Routing\Route as Routing;
- use Illuminate\Support\ServiceProvider;
- use Illuminate\View\View;
- class ResourceServiceProvider extends ServiceProvider
- {
- /**
- * @var array
- */
- protected $startups = [];
- /**
- * @var bool
- */
- protected $defer = false;
- /**
- * Register package
- */
- public function boot()
- {
- $this->package('app/resource', 'resource');
- }
- /**
- * @var array
- */
- protected $resources = [];
- /**
- * @param $ext
- * @param callable $handler
- */
- public function addResourceHandler($ext, callable $handler)
- {
- $this->resources[$ext] = $handler;
- }
- /**
- * @param string $prefix
- * @param $class
- */
- public function controller($prefix = '/', $class)
- {
- $routes = $this->app['router']->getInspector()->getRoutable($class, '');
- foreach ($routes as $method => $route) {
- $verb = $route[0]['verb'];
- $url = $prefix . substr($route[0]['plain'], 1);
- $this->app['router']->$verb($url . '{type?}', ['after' => 'resource', 'uses' => $class . '@' . $method])
- ->where('type', '.(?:[a-z]+)');
- }
- }
- /**
- * @param Routing $route
- * @param Request $request
- * @param Response $response
- * @return mixed
- */
- public function getFilterResponse(Routing $route, Request $request, Response $response)
- {
- $ext = strlen($route->getParameter('type')) > 1
- ? substr($route->getParameter('type'), 1)
- : '';
- $view = $response->getOriginalContent();
- if ($view instanceof View && isset($this->resources[$ext])) {
- return $this->resources[$ext]($route, $request, $response);
- }
- return $view;
- }
- /**
- * @param Routing $route
- * @param Request $request
- * @param Response $response
- */
- public function filter(Routing $route, Request $request, Response $response)
- {
- $data = $this->getFilterResponse($route, $request, $response);
- $response->setContent($data);
- }
- /**
- *
- */
- protected function registerDefaultHandlers()
- {
- $this->addResourceHandler('json', function(Routing $route, Request $request, Response $response) {
- $view = $response->getOriginalContent();
- return [
- 'data' => $view->getData(),
- 'view' => [
- 'name' => $view->getName(),
- 'route' => str_replace('json', 'html', $request->getPathInfo()),
- 'hash' => md5($response->getContent())
- ]
- ];
- });
- $this->addResourceHandler('html', function(Routing $route, Request $request, Response $response) {
- return $response->getOriginalContent();
- });
- }
- /**
- * @return $this|void
- */
- public function register()
- {
- $this->app['resource'] = $this->app->share(function ($app) {
- $app['router']->filter('resource', function($route, $request, $response) use ($app) {
- return $app['resource']->filter($route, $request, $response);
- });
- $this->registerDefaultHandlers();
- return $this;
- });
- return $this;
- }
- /**
- * @return array
- */
- public function provides() { return []; }
- }
- /////////////
- <?php
- namespace app\support\lib;
- use Illuminate\Support\Facades\Facade;
- class ResourceFacade extends Facade
- {
- protected static function getFacadeAccessor() { return 'resource'; }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement