(Python素人が、)ひっそりとMasoniteして行こう、Routing編。
Masonite Documentation: Routing
バージョン
Python 3.10.4
Masonite version 4.14.1
ファイル
routes/web.pyがルーティングのファイル。
Laravelだとapi.phpなどが他にファイルがありますが、masoniteだとroutes内はweb.pyだけ。
Routing
Laravel7系までの書き方と似たような感じがします。
また、Laravelだとクロージャを引数として設定できると思いますが、こちらでは無理な雰囲気。
基本的な感じのやつ
ほぼLaravelと一緒な感じですかね。
必須パラメータは@{name}でいけそうです。
また、name等の使用も可能です。
Route.get("hogehoge", "HogelcomeController@create").name("hogehoge")
Route.get("hogehoge/@id", "HogelcomeController@show")
Route.post("hogehoge", "HogelcomeController@store")
Route.put("hogehoge", "HogelcomeController@update")
Route.patch("hogehoge", "HogelcomeController@update")
Route.delete("hogehoge", "HogelcomeController@destroy")
Route.options("hogehoge", "HogelcomeController@options")
match
複数HTTPメソッドを設定したい時のやつ。
Route.match(["get", "post"], "hogehoge", "WelcomeController@show")
resource
複数のCURDなHTTPを作ってくれる便利なやつですね。
Laravelと一緒でコントローラ名だけを指定。
onlyやexceptは無さそうな気配。
Route.resource("hogehoge", "WelcomeController")
便利コマンドpython craft routes:listでroutingを確認する事ができます。
※Laravelだとphp artisan route:listかな。
+------------------------+------------------+-----------+-----------------------------------+---------------+
| URI | Name | Method(s) | Controller | Middleware(s) |
+------------------------+------------------+-----------+-----------------------------------+---------------+
| /_exceptionite/actions | | POST | ExceptioniteController@run_action | |
| /hogehoge | hogehoge.index | GET/HEAD | WelcomeController@index | web |
| /hogehoge | hogehoge.store | POST | WelcomeController@store | web |
| /hogehoge/@id | hogehoge.destroy | DELETE | WelcomeController@destroy | web |
| /hogehoge/@id | hogehoge.show | GET/HEAD | WelcomeController@show | web |
| /hogehoge/@id | hogehoge.update | PUT/PATCH | WelcomeController@update | web |
| /hogehoge/@id/edit | hogehoge.edit | GET/HEAD | WelcomeController@edit | web |
| /hogehoge/create | hogehoge.create | GET/HEAD | WelcomeController@create | web |
+------------------------+------------------+-----------+-----------------------------------+---------------+
グループ化
グループもいけそうです。
グループでnameを使用する場合、グループ内全てのURIにnameを付けないとダメでした。
Laravelだとよろしくやってくれたような気がします。
他にもmiddlewareとdomainの設定ができるようです。
Route.group(
Route.get("/url/1", "WelcomeController@show").name("aaa"),
Route.post("/url/2", "WelcomeController@show").name("bbb"),
Route.group(
Route.get("/url/3", "WelcomeController@show").name("ccc"),
Route.post("/url/4", "WelcomeController@show").name("ddd"),
prefix="fuga",
name="fugafuga.",
),
prefix="hoge",
name="hogehoge.",
)
+------------------------+-----------------------+-----------+-----------------------------------+---------------+
| URI | Name | Method(s) | Controller | Middleware(s) |
+------------------------+-----------------------+-----------+-----------------------------------+---------------+
| /_exceptionite/actions | | POST | ExceptioniteController@run_action | |
| /hoge/fuga/url/3 | hogehoge.fugafuga.ccc | GET/HEAD | WelcomeController@show | web |
| /hoge/fuga/url/4 | hogehoge.fugafuga.ddd | POST | WelcomeController@show | web |
| /hoge/url/1 | hogehoge.aaa | GET/HEAD | WelcomeController@show | web |
| /hoge/url/2 | hogehoge.bbb | POST | WelcomeController@show | web |
+------------------------+-----------------------+-----------+-----------------------------------+---------------+
注意
URIの先頭に/は付けない方が良さそうです。
getやpostなどは問題ないのですが、match、resourceなどの特殊系は/が余計に追加されてしまいます。
Route.get("aaa", "WelcomeController@show"),
Route.post("/bbb", "WelcomeController@show"),
Route.resource("/store", "WelcomeController"),
+------------------------+----------------+-----------+-----------------------------------+---------------+
| URI | Name | Method(s) | Controller | Middleware(s) |
+------------------------+----------------+-----------+-----------------------------------+---------------+
| //store | /store.index | GET/HEAD | WelcomeController@index | web |
| //store | /store.store | POST | WelcomeController@store | web |
| //store/@id | /store.destroy | DELETE | WelcomeController@destroy | web |
| //store/@id | /store.show | GET/HEAD | WelcomeController@show | web |
| //store/@id | /store.update | PUT/PATCH | WelcomeController@update | web |
| //store/@id/edit | /store.edit | GET/HEAD | WelcomeController@edit | web |
| //store/create | /store.create | GET/HEAD | WelcomeController@create | web |
| /_exceptionite/actions | | POST | ExceptioniteController@run_action | |
| /aaa | | GET/HEAD | WelcomeController@show | web |
| /bbb | | POST | WelcomeController@show | web |
+------------------------+----------------+-----------+-----------------------------------+---------------+
終わりに
やはり色々とLaravelでした。
他にも色々とあるかと思いますが、使用する機会や学習が進んだ時に更新できたらなと。
※さて続くのか。