Если я хочу перенаправить на действие контроллера. Должно ли это действие контроллера регистрироваться в routes.php
?
Laravel 5 перенаправляет на действия контроллера
Ответ 1
Если вы хотите использовать перенаправление следующим образом:
return redirect()->action('[email protected]');
Это действие должно быть зарегистрировано в файле routes.php.
Но будьте осторожны: он работает только с надежными маршрутами GET.
Вы можете увидеть доступные действия, набрав
php artisan route:list
в вашем терминале.
Я установил некоторые файлы для целей тестирования (похоже, что laravel перенаправляет на доступные методы GET с одинаковой сигнатурой параметра при попытке перенаправить на методы не-get:
// routes.php
Route::group(['middleware' => ['web']], function () {
Route::get('start', '[email protected]');
// routes, we could redirect to
// get route
Route::get('test', '[email protected]');
// post route
Route::post('testPost', '[email protected]');
// setup a resource with index, store, update, delete and show actions
Route::resource('resource', 'AnotherController');
});
Контроллер тестирования, который используется для перенаправления
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class TestController extends Controller
{
public function start()
{
// works
return redirect()->action('[email protected]');
// method not allowed exception
return redirect()->action('[email protected]');
/**
* Redirecting to routes setup via Route::resource
*/
// works
return redirect()->action('[email protected]');
// redirects to '[email protected]'
return redirect()->action('[email protected]');
// error: Missing required parameters for [Route: resource.destroy] [URI: resource/{resource}].
return redirect()->action('[email protected]');
// redirects to '[email protected]'
return redirect()->action('[email protected]', 1);
// Missing required parameters for [Route: resource.update] [URI: resource/{resource}].
return redirect()->action('[email protected]');
// redirects to '[email protected]'
return redirect()->action('[email protected]', 1);
}
}
Другой контроллер, я перенаправляюсь на:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class AnotherController extends Controller
{
public function test()
{
dd('i am test');
}
public function testPost()
{
dd('i am testPost');
}
/**
* Resourceful routes below
*/
public function index()
{
dd ('I am index');
}
public function store()
{
dd ('I am store');
}
public function destroy($id)
{
dd('I am destroy');
}
public function show($id)
{
dd('I am show');
}
public function update($id)
{
dd('I am update');
}
}
Ответ 2
Да, файл routes.php
должен содержать сведения об URL-адресе и контролере/действии:
// Get route
Route::get('/page', '[email protected]');
// Post route
Route::post('/login', '[email protected]');