(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でした。
他にも色々とあるかと思いますが、使用する機会や学習が進んだ時に更新できたらなと。
※さて続くのか。