LoginSignup
0
0

More than 1 year has passed since last update.

MasoniteでチョットRouting

Last updated at Posted at 2022-06-01

(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と一緒でコントローラ名だけを指定。

onlyexceptは無さそうな気配。

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だとよろしくやってくれたような気がします。

他にもmiddlewaredomainの設定ができるようです。

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の先頭に/は付けない方が良さそうです。
getpostなどは問題ないのですが、matchresourceなどの特殊系は/が余計に追加されてしまいます。

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

※さて続くのか。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0