2013-07-03 27 views
8

Tôi đã thêm điều này vào routes.php, dự kiến ​​nó sẽ kiểm tra phiên xác thực cho trang, tuy nhiên nó không hoạt động.Tài nguyên tuyến đường được đặt trước khi auth không hoạt động trong Laravel 4

Route::resource('ticket', 'TicketController', array('before' => 'auth')); 

Sau đó, tôi đi đến bộ điều khiển, hoạt động theo cách khác. Đó là công việc.

class TicketController extends BaseController { 

public function __construct() 
{ 
    $this->beforeFilter('auth'); 
} 

Tôi có thể biết thêm tài liệu về Route :: resource(), loại đối số nào có thể chấp nhận?

Trả lời

21

OK ... Tôi đã tìm thấy câu trả lời.

trong

\ nhà cung cấp \ laravel \ framework \ src \ Illuminate \ Routing \ Router.php

public function resource($resource, $controller, array $options = array()) 
    { 
     // If the resource name contains a slash, we will assume the developer wishes to 
     // register these resource routes with a prefix so we will set that up out of 
     // the box so they don't have to mess with it. Otherwise, we will continue. 
     if (str_contains($resource, '/')) 
     { 
      $this->prefixedResource($resource, $controller, $options); 

      return; 
     } 

     // We need to extract the base resource from the resource name. Nested resources 
     // are supported in the framework, but we need to know what name to use for a 
     // place-holder on the route wildcards, which should be the base resources. 
     $base = $this->getBaseResource($resource); 

     $defaults = $this->resourceDefaults; 

     foreach ($this->getResourceMethods($defaults, $options) as $method) 
     { 
      $this->{'addResource'.ucfirst($method)}($resource, $base, $controller); 
     } 
    } 

protected function getResourceMethods($defaults, $options) 
    { 
     if (isset($options['only'])) 
     { 
      return array_intersect($defaults, $options['only']); 
     } 
     elseif (isset($options['except'])) 
     { 
      return array_diff($defaults, $options['except']); 
     } 

     return $defaults; 
    } 

như bạn có thể thấy, nó chỉ chấp nhận duy nhất onlyexcept đối số.

Nếu bạn muốn lưu trữ các kết quả tương tự trong route.php, nó có thể được thực hiện như sau

Route::group(array('before'=>'auth'), function() { 
    Route::resource('ticket', 'TicketController'); 
}); 
+0

Hoặc bạn có thể sử dụng phương pháp() beforeFilter Kiểm Soát Tài Chính. '$ this-> beforeFilter ('auth', ['except' => 'destroy']);'. Kiểm tra nhận xét của Devon tại [liên kết này] (https://laracasts.com/index.php/discuss/channels/general-discussion/how-can-i-declare-a-before-filter-on-a-routeresource) –

Các vấn đề liên quan