Я добавил это в routes.php, ожидал, что он проверит сеанс аутентификации для страницы, однако он не работает.

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

Потом перехожу к контроллеру, работаю по другому. Это работает.

class TicketController extends BaseController {

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

Могу ли я узнать, где можно получить дополнительную документацию по Route :: resource (), какой тип аргумента он может принимать?

8
Shiro 3 Июл 2013 в 06:05

1 ответ

Лучший ответ

ОК ... Я нашел ответ.

В

\ vendor \ 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;
    }

Как видите, он принимает только аргументы only и except.

Если вы хотите заархивировать тот же результат в route.php, это можно сделать, как показано ниже.

Route::group(array('before'=>'auth'), function() {   
    Route::resource('ticket', 'TicketController');
});
22
Shiro 3 Июл 2013 в 06:32
Или вы можете использовать метод beforeFilter () контроллера. $this->beforeFilter('auth', ['except' => 'destroy']);. Проверьте комментарий Девона по адресу эту ссылку
 – 
Alwin Kesler
7 Янв 2017 в 23:36