前回まで
というわけでGo版。こっちはちょっとね……。
というわけでGo版。こっちはちょっとね……。
MVCのFW使った場合にWordPressのpost_nameをルートパスにして云々でボケーっと考えていたのだが、MSDN見ながら実装してたらボケーッとしてた時間が無駄だったっていうオチ。
ASP.NET Core のルーティング | Microsoft Docs
WordPressの投稿データを抜き出して云々をやっていて気づいたのだが、URLそのままにオレオレblogシステムを作る場合にRouter周りはどうやって実装すればいいんだ?と。
通常、というか俺の知る限りだとbootstrapファイルにリクエストを集約させて、リクエストURIから分岐して云々がデフォだ。MVCではないWordPressでも同じ。例えばPHPのPhalconではnginxの設定に下記記述をする。
# Represents the root of the domain
# https://localhost:8000/[index.php]
location / {
# Matches URLS `$_GET['_url']`
try_files $uri $uri/ /index.php?_url=$uri&$args;
}
Phalcon Documentation - Web Server Setup
そのリクエストに対してFWのコアでゴニョゴニョやって、下記のようなURLパターンで処理を分岐させ実行している。
/<Contoroler>/<Function>/<Param>
ASP.netの場合、MVCテンプレートを作るとStartup.csには自動で下記のようなコードが生成される。
app.UseEndpoints(endpoints => {
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
Go(Gin)の場合は、この間作ったメールフォームのを引用するとこんなん。
const (
IndexPath = "/contact/"
ConfirmPath = IndexPath + "confirm"
CompletePath = IndexPath + "complete"
/* ----- 省略 ----- */
// action
engine.GET(IndexPath, index)
engine.POST(ConfirmPath, confirm)
engine.POST(CompletePath, complete)
// 404
engine.NoRoute(notFound)
WordPressにはdefaultでcategoryなどがあるので、Frontend側はIndex, Categoryの2つのコントローラでいいよなーと何の疑問もなく考えていた。(コメントとか検索とかは全く不要なので)
自分のblogのパーマネントリンク設定なんて忘れていたのだ。
前回のエントリ記事のURLは https://www.dobusarai.net/blog/omaera-mo-deskmawari-wo-miseroyo/ である。/blogというのは単にこのWebサーバ内のblogディレクトリの中にWordPressを突っ込んでいるからそうなっているだけで、WordPressから見ればURLは /omaera-mo-deskmawari-wo-miseroyo/ こうである。これはwp_posts.post_nameである。
`post_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
unique付いてないんだな、phpで存在チェックしてるんだな、とかはどうでもよい。普通のMVCフレームワークで作ると……通常は上のparamをIndexControllerで受けつけようとすると /index/omaera-mo-deskmawari-wo-miseroyo となる。PHPでナウな感じじゃないなら /?post_name=omaera-mo-deskmawari-wo-miseroyo とかでもいいけど。
や、こんなんどこかでURLを解析して分岐してるだけなのはわかっている(そして美しくないコードであることも)のだが、このpost_nameをキーにして個別ページを描画するというルールに則った場合、お行儀の良いMVCにするのは不可能だなと。URLパターン変えてnginx側でredirectさせてもいいのだが(そもそもこんな泡沫blogのURLなんてどうでもいいのだが)めんどくさい!コードたくさん書くよりミドルウェアの設定を変えるほうがよっぽど!
debuggerで追いかけてみた。/wp-includes/class-wp.php内で鬼のような数の正規表現パターン(commentがーsearchがー等々)を所有してループで回し、リクエストにhitするかどうかーみたいのをやってる。想像通り(実装はあ"ーって感じだが)なのでもう追いかけるの終わりにする。
これはデスク周りの写真、自宅作業環境 Advent Calendar 2020 12/06のエントリです。
自身のPC周りを晒すことに快感を覚えるキチガイと、それを覗き見てフヒフヒ言ってるキチガイは昔からかなりの数がおりまして。昔々、自作板のお前等の自作機のある部屋みせろよスレは私、常駐してました。過疎ってるけど今もまだあんのなー。まあ今回はデスク周りなんですけど。