ホームページ >バックエンド開発 >PHPチュートリアル >Yii2 フレームワークを使用した完全なブログ システムの構築に関するリソースの共有

Yii2 フレームワークを使用した完全なブログ システムの構築に関するリソースの共有

黄舟
黄舟オリジナル
2017-09-01 09:49:082512ブラウズ

Yii は、迅速な PHP 開発のためのベストプラクティスの 1 つであり、その豊富な拡張リソースと迅速な開発アイデアが企業にますます好まれており、そのアプリケーションはますます普及しています。このコースでは、ブログシステムを例に、yii2.0 を使った実践的な開発方法と、yii2.0 の実践的な応用方法を学びます。内容は基本構成、ブログフロントエンド、ブログバックエンドの3部に分かれています。

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


ルーティングに基づいて URL を生成する必要がある場合は、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 フィルター、ゲスト フィルター、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;;
}));


ルート フィルターが 3 番目のパラメーターとして応答 $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/ で始まるすべてのルートに管理フィルターが適用されます。アスタリスクはワイルドカード文字として機能し、すべての文字の組み合わせに一致します。

HTTP メソッドを指定してパターン フィルターを制約することもできます:

コードは次のとおりです:

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

Filter クラス

高度なフィルターの場合、クロージャー関数の代わりにクラスを使用できます。フィルター クラスはアプリケーションの外部に存在する IoC コンテナーであるため、フィルター内で依存関係の注入を使用でき、テストが容易になります。

フィルタークラスを定義する

コードは次のとおりです:

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


クラスベースのフィルターを登録します

コードは次のとおりです:

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

名前付きルート

ジャンプを生成するときに名前付きルートを指定するのが簡単ですまたは URL ルーティング。次のようにルートの名前を指定できます:

コードは次のとおりです:

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

URL またはジャンプを生成しています。 ルートの名前を使用します:

コードは次のとおりです:

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

currentRouteName メソッドを使用してルートの名前を取得できます:

コードは次のとおりです:

$name = Route::currentRouteName();

Routeグループ

ルートのグループにフィルターを適用したい場合があります。ルートごとにフィルターを指定する必要はなく、ルート グループを使用できます:

コードは次のとおりです:

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)
{
//
});
});

ルート プレフィックス

ルートのグループは、属性配列のプレフィックス オプションを使用して、ルーティング グループにプレフィックスを追加できます:

ルーティング グループ

コードは次のとおりです:

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。