2013-11-18 1 views
1

У меня есть два типа контента, которые я бы хотел, чтобы они были доступны на одном уровне.Как обрабатывать динамические URL-адреса, которые находятся на одном уровне в Laravel 4?

  1. Page:
    • mysite.com/about
    • mysite.com/contact
  2. Категория:
    • mysite.com/category-1
    • mysite.com/category-2

Я хотел бы маршрут к способу контроллера в соответствии с конкретным типом контента. Любая идея, как я могу справиться с этим?

Мой код ...

Route::get('{slug}', function($slug) { 

    $p = Page::where('slug', $slug)->first(); 

    if (!is_null($p)) { 

     // How i can call a controller method here? 

    } else { 

     $c = Category::where('slug', $slug)->first(); 

     if (!is_null($c)) { 

      // How i can call a another controller method here? 

     } else { 

      // Call 404 View... 

     } 
    } 
}); 

ответ

3

Не усложнять свой файл маршрутов, вы можете создать один контроллер для обработки все это для вас:

Ваш пробкового маршрут:

Route::get('{slug}', '[email protected]'); 

A SlugController для обработки ваших вызовов:

class SlugController extends Controller { 

    public function call($slug) 
    { 
     $p = Page::where('slug', $slug)->first(); 

     if (!is_null($p)) { 

      return $this->processPage($p); 

     } else { 

      $c = Category::where('slug', $slug)->first(); 

      if (!is_null($c)) { 

       return $this->processCategory($c); 

      } else { 

       App::abort(404); 

      } 
     } 
    } 

    private function processPage($p) 
    { 
     /// do whatever you need to do 
    } 

    private function processCategory($c) 
    { 
     /// do whatever you need to do 
    } 
} 
+0

Спасибо за ваш ответ Антонио. Я закончил тем же самым решением, что и вы, прежде чем я увидел ваш ответ, сделав именно то, что вы предложили. С этим я считаю, что это должен быть лучший и самый интуитивный способ справиться с этим. Сначала я пытался сохранить контекст контроллеров. В моем случае у меня есть контроллер с именем GameController, который обрабатывает все методы, связанные с играми. С этим решением я бы оставил категории из этого контроллера, но, как вы сказали, маршруты в конечном итоге становятся все менее сложными, что хорошо. – gsmeira

Смежные вопросы