2015-06-16 3 views
8

Эта линия работает в routes.php:Laravel 5: Перенаправление беды

Route::get('faq', '[email protected]'); 

Так что я закомментировать и попробовать это:. Не работает, когда пользователь вошел в систему он не будет перенаправлять в контроллер действие, которое работает в упомянутом выше коде:

Route::get('faq', function() 
{ 
    if (Auth::check()) 
    { 
     return redirect()->action('[email protected]'); 
    } 
    else 
    { 
     return Redirect::to('/'); 
    } 
}); 

Ошибка:

New exception in xxxx.xx 
InvalidArgumentException · GET /faq 
Action App\Http\Controllers\[email protected] not defined. 

Но контроллер и способ ясно там. Очевидно, я делаю что-то неправильно.

+0

Вы можете попробовать поставить "/" перед тем часто задаваемых вопросов. Что-то вроде Route :: get ('/ faq'). – Michel

+1

не проверяйте подлинность в своем маршруте. вместо этого используйте middlewares для действия вашего контроллера. – Salar

ответ

6

Вы пытаетесь направить что-то в самом определении маршрута. Это не так, как это работает.

Есть несколько способов сделать то, что вы хотите достичь. Для каждого есть плюсы и минусы, но все они будут работать.

Как правило, наилучшим способом является использование некоторых Auth middleware on your route. Laravel 5 includes this out of the box:

Route::group(['middleware' => 'auth'], function() { 
    Route::get('faq', '[email protected]'); 
}); 

Таким образом, пользователь должен войти в систему, чтобы получить доступ к FAQ.

Другой вариант сделать Controller Middleware:

Route::get('faq', '[email protected]'); 

затем в ваш HomeController:

class HomeController extends Controller 
{ 
    public function __construct() 
    { 
     $this->middleware('auth', ['only' => ['faq']]); 
    } 

    public function faq() 
    {  
     // Only logged in users can see this 
    } 
} 
+0

Спасибо, что работал очень хорошо. (Маршрут: группа) – JasonGenX