예제 #1
0
 /**
  * Get the URL to a named route.
  *
  * @param  string  $name
  * @param  mixed   $parameters
  * @param  bool  $absolute
  * @return string
  *
  * @throws \InvalidArgumentException
  */
 public function route($name, $parameters = [], $absolute = true)
 {
     if (!is_null($route = $this->routes->getByName($name))) {
         return $this->toRoute($route, $parameters, $absolute);
     }
     throw new InvalidArgumentException("Route [{$name}] not defined.");
 }
예제 #2
0
 /**
  * Get the URL to a named route.
  *
  * @param  string  $name
  * @param  mixed   $parameters
  * @param  bool  $absolute
  * @param  \Illuminate\Routing\Route  $route
  * @return string
  *
  * @throws \InvalidArgumentException
  */
 public function route($name, $parameters = array(), $absolute = true, $route = null)
 {
     $route = $route ?: $this->routes->getByName($name);
     $parameters = (array) $parameters;
     if (!is_null($route)) {
         return $this->toRoute($route, $parameters, $absolute);
     }
     throw new InvalidArgumentException("Route [{$name}] not defined.");
 }
예제 #3
0
 /**
  * Make permission instances by type
  *
  * @param string                $type    type string
  * @param MemberEntityInterface $user    user instance
  * @param string                $siteKey site key
  * @return Permission[]
  * @throws NotMatchedInstanceException
  */
 public function makesByType($type, MemberEntityInterface $user = null, $siteKey = 'default')
 {
     $user = $user ?: $this->auth->user();
     $permissions = [];
     $registereds = $this->repo->fetchByType($siteKey, $type);
     foreach ($registereds as $registered) {
         $ancestors = array_filter($registereds, function ($item) use($registered) {
             $itemNames = explode('.', $item->name);
             $registeredNames = explode('.', $registered->name);
             if (count($itemNames) >= count($registeredNames)) {
                 return false;
             }
             for ($i = 0; $i < count($itemNames); $i++) {
                 if ($itemNames[$i] !== $registeredNames[$i]) {
                     return false;
                 }
             }
             return true;
         });
         if (count($ancestors) > 0) {
             uasort($ancestors, [$this, 'cmp']);
         }
         foreach ($ancestors as $ancestor) {
             $registered->addParent($ancestor);
         }
         if (isset($this->extends[$type]) === true) {
             $permission = $this->extends[$type]($registered->name, $user, $registered);
             if ($permission instanceof Permission === false) {
                 throw new NotMatchedInstanceException(['type' => $type]);
             }
             $permissions[$registered->name] = $permission;
         } else {
             switch ($type) {
                 case 'route':
                     $route = $this->routes->getByName($registered->name);
                     $permissions[$registered->name] = new RoutePermission($route, $user, $registered);
                     break;
                 case 'instance':
                     $permissions[$registered->name] = new InstancePermission($registered->name, $user, $registered);
                     break;
             }
         }
     }
     return $permissions;
 }
예제 #4
0
 /**
  * @param RouteCollection $routes
  *
  * @return Controller
  *
  * @throws ShapeShifterException
  */
 protected function resolveControllerByName(RouteCollection $routes)
 {
     $contr = $routes->getByName($this->destination);
     if (!$contr) {
         throw new ShapeShifterException("Route [{$this->destination}] does not exist");
     }
     list($class) = explode('@', $contr->getActionName());
     return app($class);
 }
예제 #5
0
 protected function assertHasNamedRoute($name)
 {
     $this->getRoutes();
     $this->assertNotNull($this->routeCol->getByName($name), "Missing named route {$name}");
 }