laravel框架学习-路由,控制器,中间件篇

Laravel 5.1是一个PHP开发的一个框架,由于初学,写的东西多数东西和文档一样,只不过加了一点自己的理解吧,只不过梳理一些自己思维,所以有什么不足希望能够指出。

文档位置:http://www.golaravel.com/

1.路由:

在larvae框架中,内置的中间件,控制器都是放在app/http文件下的,路由文件则是route.php文件,而我们的大多数路由都是放在这个文件下的

定义单一基本路由:

Route::get('/', function()

{

return 'Hello World';

});

其中Route::注册路由, get/post/put/delete文件是访问方式,‘/’ 这是访问路径:就是用户通过:http://localhost:8081/server.php访问时后面跟随的路径,系统进入route.php文件,根据‘/’的不同,访问不同的方法。

为多种请求注册路由

Route::match(['get', 'post'], '/', function(){}

注册路由响应所有 HTTP 请求

Route::any('', function(){}

想要只到我们访问的是什么连接

print(url('home'));

获取参数的路由

Route::get('user/{name?}', function($name){ print($name)}

使用条件限制数组

Route::get('user/{id}/{name}', function($id, $name)

{

})

->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

定义全局模式

如果你想让特定路由参数总是遵询特定的正则表达式,可以使用 pattern 方法。在 RouteServiceProvider 的 boot 方法里定义模式:

注意:RouteServiceProvider在APP/Providers文件夹下

$router->pattern('id', '[0-9]+');

定义模式之后,会作用在所有使用这个特定参数的路由上:

Route::get('user/{id}', function($id){// 只有 {id} 是数字才被调用。});

取得路由参数

如果需要在路由外部取得其参数,使用 input 方法:

 $route->input('id')    $route是路由 通过input方法读取

给路由指定名称:

Route::get('user/profile', ['as' => 'profile', function(){}]);

当前路由名称

$url = route('profile');

路由群组,当我们有时候需要中间件需要特定的一些路由使用时就用到了我们路由群组

Route::group(['middleware' => ['foo', 'bar']], function()//其中middleware指定中间件有哪些

{

Route::get('/', function()

{

// Has Foo And Bar Middleware

});

Route::get('user/profile', function()

{

// Has Foo And Bar Middleware

});

});

给路由加前缀

Route::group(['prefix' => 'admin'], function()

绑定参数至模型

public function boot(Router $router)

{

parent::boot($router);

$router->model('user', 'App\User');//绑定参数

}

然后定义一个有 {user} 参数的路由:

Route::get('profile/{user}', function(App\User $user){});

因为我们已经将 {user} 参数绑定到 App\User 模型,所以 User 实体将被注入到路由。所以举例来说,通过get/profile/1的链接时 profile/1 将注入   User 实体。

2.中间件:

怎么说呢 ,文档中一大推中间件介绍看的我有点茫然,经过分析发现,中间件说白了就是游戏中的关卡,符合条件的通过,不符合条件的回去。

创建中间件

php artisan make:middleware OldMiddleware

创建中间件

use Closure;

class OldMiddleware {

public function handle($request, Closure $next)

{

    if ($request->input('age') < 200)

  {

   return redirect('home');

  }

   return $next($request); 

}

引用中间件

use Closure;

use Illuminate\Contracts\Routing\TerminableMiddleware;

class StartSession implements TerminableMiddleware {

public function handle($request, Closure $next)

{

return $next($request);

}

public function terminate($request, $response)

{

}

}

3.控制器

控制器,控制器在我看来就是将路由中需要做的是情放到控制器中去做,防止代码臃肿,当然,所有控制器都应该是扩展控制器基础类的

use App\Http\Controllers\Controller;

class UserController extends Controller {

/**

* 显示所给定的用户个人数据。

*

* @param  int  $id

* @return Response

*/

public function showProfile($id)

{

return view('user.profile', ['user' => User::findOrFail($id)]);

}

引用控制器也很简单

Route::get('\', 'Photos\AdminController@showProfile');

要产生一个指向控制器行为的 URL,可使用 action 辅助方法。

$url = action('App\Http\Controllers\FooController@method');

控制器中也可以添加中间件

public function __construct()

{

$this->middleware('auth');

$this->middleware('log', ['only' => ['fooAction', 'barAction']]);

$this->middleware('subscribed', ['except' => ['fooAction', 'barAction']]);

}

待续。。。。。

你可能感兴趣的:(laravel框架学习-路由,控制器,中间件篇)