创建一个控制器
php artisan make:controller <controller-name> --plain
替换 <controller-name> 为您的控制器的名称。我们将创建一个简单的构造器使用传递一个参数— plain。 如果不希望创建一个普通的构造函数,可以忽略参数。 创建的构造函数在 app/Http/Controllers. 你会看到一些基本的编码已经自动生成了,你可以自定义添加编码。创建控制器可以通过routes.php文件中使用以下语法调用。
语法
Route::get(‘base URI’,’controller@method’);
示例
php artisan make:controller UserController

第3步 - 你可以在 app/Http/Controller/UserController.php 看到创建控制器已经自动生成一些基本的代码,您可以根据需要添加自己的编码。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UserController extends Controller {
//
}
控制器中间件
我们已经在前面学习了中间件,它可以与控制器一起使用。中间件也可以被分配到控制器的路由或控制器的构造函数中。可以使用中间件方法来分配中间件到控制器。 已注册中间件也可以限制到控制器的某些方法。
分配中间件路由
Route::get('profile', [
'middleware' => 'auth',
'uses' => 'UserController@showProfile'
]);
控制器的构造函数中分配中间件
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UserController extends Controller {
public function __construct(){
$this->middleware('auth');
}
}
示例
第1步 - 添加以下行到 app/Http/routes.php 文件文件并保存。
routes.php
<?php
Route::get('/usercontroller/path',[
'middleware' => 'First',
'uses' => 'UserController@showPath'
]);
php artisan make:middleware FirstMiddleware
FirstMiddleware.php
<?php
namespace App\Http\Middleware;
use Closure;
class FirstMiddleware {
public function handle($request, Closure $next) {
echo '<br>First Middleware';
return $next($request);
}
}
php artisan make:middleware SecondMiddleware
第5步 - 添加以下代码在新创建一个处理方法 SecondMiddleware 在 app/Http/Middleware/SecondMiddleware.php.
SecondMiddleware.php
<?php
namespace App\Http\Middleware;
use Closure;
class SecondMiddleware {
public function handle($request, Closure $next){
echo '<br>Second Middleware';
return $next($request);
}
}
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'First' => \App\Http\Middleware\FirstMiddleware::class,
'Second' => \App\Http\Middleware\SecondMiddleware::class,
];
php artisan make:controller UserController

app/Http/UserController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class UserController extends Controller {
public function __construct(){
$this->middleware('Second');
}
public function showPath(Request $request){
$uri = $request->path();
echo '<br>URI: '.$uri;
$url = $request->url();
echo '<br>';
echo 'URL: '.$url;
$method = $request->method();
echo '<br>';
echo 'Method: '.$method;
}
}
php artisan serve
http://localhost:8000/usercontroller/path

Restful 资源控制器
通常情况下当开发一个应用,我们需要执行CRUD(创建,读取,更新,删除)操作。Laravel使这项工作更容易做到的。只需创建一个控制器,而Laravel会提供所有的CRUD操作的方法。您也可以注册一个路由的所有方法在routes.php文件中。
示例
php artisan make:controller MyController
app/Http/Controllers/MyController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class MyController extends Controller {
public function index(){
echo 'index';
}
public function create(){
echo 'create';
}
public function store(Request $request){
echo 'store';
}
public function show($id){
echo 'show';
}
public function edit($id){
echo 'edit';
}
public function update(Request $request, $id){
echo 'update';
}
public function destroy($id){
echo 'destroy';
}
}
第3步 - 添加以下代码到文件:app/Http/routes.php
app/Http/routes.php
Route::resource('my','MyController');
步骤4 - 我们现在通过使用资源控制器注册MyController 的所有方法。下面是由资源控制器处理的动作的列表。
|
动词
|
路径 | 动作 |
路由名称
|
|---|---|---|---|
| GET | /my | index | my.index |
| GET | /my/create | create | my.create |
| POST | /my | store | my.store |
| GET | /my/{my} | show | my.show |
| GET | /my/{my}/edit | edit | my.edit |
| PUT/PATCH | /my/{my} | update | my.update |
| DELETE | /my/{my} | destroy | my.destroy |
| URL | 描述 | 输出图像 |
|---|---|---|
| http://localhost:8000/my | 执行 Controller.php 的 index 方法 | index |
| http://localhost:8000/my/create | 执行 Controller.php 的 create 方法 | create |
| http://localhost:8000/my/1 | 执行 Controller.php 的 show方法 | show |
| http://localhost:8000/my/1/edit | 执行 Controller.php 的 edit方法 | edit |
隐式控制器
隐式控制器允许你定义一个路由处理控制器中的每一个动作。如下图所示使用 Route:controller 方法,在路由文件 route.php 中定义它。
Route::controller(‘base URI’,’<class-name-of-the-controller>’);
控制器的方法名应该是类似 GET或POST HTTP动词开头。如果以 get 开始,它只会处理 get 请求,如果它使用 post 开駋那么将处理post请求。在HTTP动词后,可以方法使用任何名称,但它应遵循 URI 的格式。
示例
第1步 - 执行下面的命令来创建一个控制器。其类名称为 ImplicitController。这个类你也可以使用其它的任何名称。
php artisan make:controller ImplicitController
app/Http/Controllers/ImplicitController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ImplicitController extends Controller {
/**
* Responds to requests to GET /test
*/
public function getIndex(){
echo 'index method';
}
/**
* Responds to requests to GET /test/show/1
*/
public function getShow($id){
echo 'show method';
}
/**
* Responds to requests to GET /test/admin-profile
*/
public function getAdminProfile(){
echo 'admin profile method';
}
/**
* Responds to requests to POST /test/profile
*/
public function postProfile(){
echo 'profile method';
}
}
app/Http/routes.php
Route::controller('test','ImplicitController');
构造器注入
Laravel服务容器是用来解析所有Laravel控制器。因此,你能够输入-提示控制器也许需要在其构造依赖。依赖关系将被自动解析和注射到控制器实例。
示例
app/Http/routes.php
class MyClass{
public $foo = 'bar';
}
Route::get('/myclass','ImplicitController@index');
app/Http/Controllers/ImplicitController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ImplicitController extends Controller {
private $myclass;
public function __construct(\MyClass $myclass){
$this->myclass = $myclass;
}
public function index(){
dd($this->myclass);
}
}
http://localhost:8000/myclass

方法注入
示例
app/Http/routes.php
class MyClass{
public $foo = 'bar';
}
Route::get('/myclass','ImplicitController@index');
app/Http/Controllers/ImplicitController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ImplicitController extends Controller {
public function index(\MyClass $myclass){
dd($myclass);
}
}
http://localhost:8000/myclass

