本文概述
路由控制器允许你使用用于处理请求的方法来创建控制器类。
现在, 我们将通过一个示例来了解路由控制器。
步骤1:首先, 我们需要创建一个控制器。在上一主题中, 我们已经创建了名为“ PostController”的控制器。
步骤2:打开web.php文件并编写以下代码:
Route::get('/post', 'PostController@index');
在上面的代码中, “ / post”是我们要访问的URL, 而PostController是控制器的名称。 ‘index’是PostController.php文件中可用方法的名称, @index表示当我们访问’/ post’URL时应该点击index()方法。
步骤3:添加下面突出显示的代码:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PostController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return "Hello srcmini";} →
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Reques $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http \Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request
$request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return
\Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
步骤4:在浏览器中输入URL, 即localhost / laravelproject / public / host, 然后输出如下所示:
输出量
到目前为止, 我们已经观察到了如何访问控制器。现在, 我们将看到如何将数据传递到Controller类。
将数据传递到控制器
让我们通过一个示例来了解如何将数据传递到Controller:
步骤1:打开web.php文件并添加以下代码:
路线:: get(’/ post / {id}’, ‘PostController @ index’);
上面的代码在“ / post” URL中包含“ id”参数。
步骤2:编辑PostController.php文件。
public function index($id)
{
return "ID is :". $id;
}
在上述情况下, 我们更新了index()方法。我们已经在index()方法中传递了’id’参数。
步骤3:在网络浏览器中输入URL’localhost / laravelproject / post / 100′, 然后输出如下所示:
控制器和命名空间
当我们在Route :: get()方法中指定控制器类时, 则无需指定完整的控制器名称空间。当RouteServiceProvider加载包含命名空间的所有路由文件时, 我们只需要指定命名空间的App / Http / Controllers部分之后的类名即可。
如果完整的控制器类是App / Http / Controllers / Post / PostController, 那么我们可以如下所示注册Controller的路由:
路线:: get(’\ post’, ‘Post \ PostController @ index’);
单动控制器
如果要在控制器中使用单个方法, 则可以在控制器上使用单个__invoke()方法。
当我们使用命令php artisan:make controller PostController创建控制器时, PostController文件的结构为:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PostController extends Controller
{
//
}
现在, 我们将__invoke()函数的代码添加到PostController类中:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class PostController extends Controller
{
//
public function __invoke($id)
{
return "id is : ". $id;
}
}
最后, 我们将代码添加到web.php文件中, 该文件负责处理操作。
route::get('/post/{id}', 'PostController');
上面的代码命中了PostController类的__invoke()方法。得出的结论是, 我们不需要编写@invoke方法来访问单个动作控制器。
输出量
当我们输入URL’localhost / laravelproject / public / post / 67’时, 输出将是:
如果未指定任何操作, 即我们忘记编写__invoke()方法, 则会引发UnexpectedValueExpression。
假设我们从PostController类中删除__invoke()方法, 那么输出将是:
评论前必须登录!
注册