首頁 >後端開發 >php教程 >關於Yii2框架建構完整部落格系統的資源分享

關於Yii2框架建構完整部落格系統的資源分享

黄舟
黄舟原創
2017-09-01 09:49:082510瀏覽

Yii是PHP快速開發的最佳實踐之一,豐富的擴展資源,快速開發的思想,越來越受到企業的青睞,應用也愈加廣泛。本課程以部落格系統為例,講述如何運用yii2.0實戰開發,從中學習yii2.0的實作應用。內容分為三個部分:基礎配置、部落格前台、部落格後台。

關於Yii2框架建構完整部落格系統的資源分享

影片播放位址://m.sbmmt.com/course/266.html

該老師講課風格:

教師講課深入淺出,條理清楚,層層剖析,環環相扣,論證嚴密,結構嚴謹,用思維的邏輯力量吸引學生的注意力,用理智控制課堂教學進程。學生透過聽教師的講授,不僅學到知識,也受到思維的訓練,還受到教師嚴謹的治學態度的熏陶和感染

本視頻中較為難點是Yii框架博客系統的框架路由配置了:

基本路由

您的應用程式的絕大多數路由將在app/routes.PHP 文件中定義。 Laravel 中最簡單的路由由一個 URI 和一個閉包呼叫組成。

基本GET 路由

程式碼如下:

Route::get('/', function(){return 'Hello World';});

基本POST 路由

程式碼如下:

Route::post('foo/bar', function()
{
return 'Hello World';
});


註冊一個路由以回應所有HTTP 方法

 程式碼如下:

Route::any('foo', function()
{
   return 'Hello World';
});


強制一個路由必須透過HTTPS 存取

#程式碼如下:

Route::get('foo', array('https', function()
{
    return 'Must be over HTTPS';
}));


經常您需要根據路由產生URLs,您可以透過使用URL::to 方法:

程式碼如下:

$url = URL::to('foo');

路由參數

程式碼如下:

Route::get('user/{id}', function($id)
{
return 'User '.$id;
});


可選的路由參數

##程式碼如下:

Route::get('user/{name?}', function($name = null)
{
return $name;
});

帶有預設值的可選的路由參數

 程式碼如下:

Route::get('user/{name?}', function($name = 'John')
{
return $name;
});

帶有正規表示式約束的路由

程式碼如下:

Route::get('user/{name}', function($name)
{
//
})
->where('name', '[A-Za-z]+');
Route::get('user/{id}', function($id)
{
//
})
->where('id', '[0-9]+');

路由過濾器

  路由過濾器提供了一種限制訪問指定路由的簡單的方法,這在您需要為您的網站建立需要認證區域的時候非常有用。 Laravel 框架中包含了一些路由過濾器,例如 auth 過濾器、auth.basic 過濾器、guest 過濾器、以及 csrf 過濾器。它們被存放在 app/filters.php 文件中。

定義一個路由過濾器


程式碼如下:

Route::filter('old', function()
{
if (Input::get(&#39;age&#39;) < 200)
{
return Redirect::to(&#39;home&#39;);
}
});

  如果一個回應從一個路由過濾器中返回,這個回應即被認為是這個請求的回應,路由將不會執行,任何關於這個路由的after 過濾器也將被取消執行。

  為一個路由指定一個路由過濾器


代碼如下:

Route::get(&#39;user&#39;, array(&#39;before&#39; => &#39;old&#39;, function()
{
return &#39;You are over 200 years old!&#39;;
}));

為一個路由指定多個路由過濾器

#程式碼如下:

Route::get(&#39;user&#39;, array(&#39;before&#39; => &#39;auth|old&#39;, function()
{
return &#39;You are authenticated and over 200 years old!&#39;;
}));

指定路由過濾器參數

程式碼如下:

Route::filter(&#39;age&#39;, function($route, $request, $value)
{
//
});
Route::get(&#39;user&#39;, array(&#39;before&#39; => &#39;age:200&#39;, function()
{
return &#39;Hello World&#39;;
}));

  當路由過濾器接收到作為第三個參數的回應$response:

程式碼如下:

Route::filter(&#39;log&#39;, function($route, $request, $response, $value)
{
//
});

#基本路由篩選器的模式

您可能想要根據URI 為一組路由指定過濾器。


程式碼如下:

Route::filter(&#39;admin&#39;, function()
{
//
});
Route::when(&#39;admin/*&#39;, &#39;admin&#39;);

在在上面的範例中,admin 過濾器將套用帶有所有以 admin/ 開頭的路由。星號作為一個通配符,將適配到所有字元的組合。

您也可以透過指定HTTP 方法約束模式篩選器:

程式碼如下:

Route::when(&#39;admin/*&#39;, &#39;admin&#39;, array(&#39;post&#39;));

過濾器類別

對於進階的篩選器,您可以使用一個類別來代替閉包函數。因為過濾器類別是位於應用程式之外的 IoC 容器,您能夠在過濾器中使用依賴注入,更易於測試。

定義一個篩選器類別


程式碼如下:

class FooFilter {
public function filter()
{
// Filter logic...
}
}

註冊一個基於類別的篩選器

 程式碼如下:

Route::filter(&#39;foo&#39;, &#39;FooFilter&#39;);

命名路由

命名路由在更容易在產生跳轉或URLs 時指定路由。您可以像這樣為路由指定一個名字:


程式碼如下:

Route::get(&#39;user/profile&#39;, array(&#39;as&#39; => &#39;profile&#39;, function()
{
//
}));

您也可以為控制器的方法指定路由名字:


#程式碼如下:

Route::get(&#39;user/profile&#39;, array(&#39;as&#39; => &#39;profile&#39;, &#39;uses&#39; => &#39;UserController@showProfile&#39;));

  現在您在產生URLs 或跳轉的時候使用路由的名字:


程式碼如下:

$url = URL::route(&#39;profile&#39;);
$redirect = Redirect::route(&#39;profile&#39;);

您可以使用currentRouteName 方法取得一個路由的名字:

程式碼如下:

$name = Route::currentRouteName();

路由群組

#有些時候您可能會想要套用篩選器到一組路由。您不必要為每個路由指定過濾器,可以使用路由組:


代碼如下:

Route::group(array(&#39;before&#39; => &#39;auth&#39;), function()
{
Route::get(&#39;/&#39;, function()
{
// Has Auth Filter
});
Route::get(&#39;user/profile&#39;, function()
{
// Has Auth Filter
});
});

子網域路由

  Laravel 路由也能夠處理通配符的子域名,並且從域名中取得通配符參數:

註冊子域名路由


#代碼如下:

Route::group(array(&#39;domain&#39; => &#39;{account}.myapp.com&#39;), function()
{
Route::get(&#39;user/{id}&#39;, function($account, $id)
{
//
});
});

路由前綴

一群組路由可以透過在屬性數組中使用prefix 選項為路由組添加前綴:

為路由組添加前綴


代碼如下:

Route::group(array(&#39;prefix&#39; => &#39;admin&#39;), function()
{
Route::get(&#39;user&#39;, function()
{
//
});
});

路由模型綁定定

  模型绑定提供了一个简单的方法向路由中注入模型。比如,不仅注入一个用户的 ID,您可以根据指定的 ID 注入整个用户模型实例。首先使用 Route::model 方法指定所需要的模型:

为模型绑定一个变量

 代码如下:

Route::model(&#39;user&#39;, &#39;User&#39;);


然后, 定义一个包含 {user} 参数的路由:

 代码如下:

Route::get(&#39;profile/{user}&#39;, function(User $user)
{
//
});

  因为我们已经绑定 {user} 参数到 User 模型,一个 User 实例将被注入到路由中。因此,比如一个 profile/1 的请求将注入一个 ID 为 1 的 User 实例。

  注意: 如果在数据库中没有找到这个模型实例,将引发404错误。

  如果您希望指定您自己定义的没有找到的行为,您可以为 model 方法传递一个闭包作为第三个参数:

代码如下:

Route::model(&#39;user&#39;, &#39;User&#39;, function()
{
throw new NotFoundException;
});


  有时您希望使用自己的方法处理路由参数,可以使用 Route::bind 方法:

代码如下:

Route::bind(&#39;user&#39;, function($value, $route)
{
return User::where(&#39;name&#39;, $value)->first();
});


引发404错误

  有两种方法在路由中手动触发一个404错误。首先,您可以使用 App::abort 方法:

代码如下:

App::abort(404);

其次,您可以抛出一个 Symfony\Component\HttpKernel\Exception\NotFoundHttpException 的实例。

更多关于处理404异常和为这些错误使用使用自定义响应的信息可以在 错误 章节中找到。

路由至控制器

Laravel 不仅允许您路由至闭包,也可以路由至控制器类,甚至允许创建 资源控制器.

以上是關於Yii2框架建構完整部落格系統的資源分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn