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

創建中間件

<?php namespace App\Http\Middleware

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.控制器

控制器,控制器在我看來就是將路由中需要做的是情放到控制器中去做,防止代碼臃腫,當然,所有控制器都應該是擴展控制器基礎類的

<?php namespace App\Http\Controllers;

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']]);

}

待續。。。。。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容