2017-08-23 4 views
2

Je me demande quelle est la différence avec phoenix.gen.json et phx.gen.json est. Je utilise actuellement Phoenix 1.3. Ubuntu 16.04LTS. et la version suivante de Erlang/ElixirPhoenix générateur phoenix.gen.json vs mélange phx.gen.json

Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:10] [hipe] [kernel-poll:false] 

Elixir 1.5.1 

Avec phoenix.gen.json:

$> mix phoenix.gen.json Session sessions session_id:string 
mix phoenix.gen.json is deprecated. Use phx.gen.json instead. 
* creating web/controllers/session_controller.ex 
* creating web/views/session_view.ex 
* creating test/controllers/session_controller_test.exs 
* creating web/views/changeset_view.ex 
mix phoenix.gen.model is deprecated. Use phx.gen.schema instead. 
* creating web/models/session.ex 
* creating test/models/session_test.exs 
* creating priv/repo/migrations/20170823190558_create_session.exs 

Add the resource to your api scope in web/router.ex: 

    resources "/sessions", SessionController, except: [:new, :edit] 

Remember to update your repository by running migrations: 

    $ mix ecto.migrate 

Avec phx.gen.json:

$> mix phx.gen.json API ContentAsset content_assets content_id:integer 
* creating lib/my_app_web/controllers/content_asset_controller.ex 
* creating lib/my_app_web/views/content_asset_view.ex 
* creating test/my_app_web/controllers/content_asset_controller_test.exs 
* creating lib/my_app_web/views/changeset_view.ex 
* creating lib/my_appi_web/controllers/fallback_controller.ex 
* creating lib/my_app/api/content_asset.ex 
* creating priv/repo/migrations/20170823191342_create_content_assets.exs 
* creating lib/my_app/api/api.ex 
* injecting lib/my_app/api/api.ex 
* creating test/my_app/api/api_test.exs 
* injecting test/my_app/api/api_test.exs 

Add the resource to your :api scope in lib/my_app_web/router.ex: 

    resources "/content_assets", ContentAssetController, except: [:new, :edit] 


Remember to update your repository by running migrations: 

    $ mix ecto.migrate 

Comme on peut le voir que ces deux générateurs ne génèrent pas le même ensemble de des dossiers.

De plus, lorsque nous exécutons le serveur de développement. Je vois les erreurs suivantes des fichiers phx.gen.json.

$> mix phx.server 
Compiling 12 files (.ex) 

== Compilation error in file lib/my_app_web/views/content_asset_view.ex == 
** (CompileError) lib/my_app_web/views/content_asset_view.ex:2: module MyAppWeb is not loaded and could not be found 
    (elixir) expanding macro: Kernel.use/2 
    lib/my_app_web/views/content_asset_view.ex:2: MyAppWeb.ContentAssetView (module) 
    (elixir) lib/kernel/parallel_compiler.ex:121: anonymous fn/4 in Kernel.ParallelCompiler.spawn_compilers/1 

Répondre

2

La différence significative avec phoenix.gen.json et phx.gen.json est le module de contexte . C'est un concept de "Contexte Bounded" de Domain-Driven Design.

Le contexte est un module Elixir qui sert une limite API pour la ressource donnée. Un contexte contient souvent de nombreuses ressources connexes. Par conséquent, si le contexte existe déjà, il sera augmenté de fonctions pour la ressource donnée. Notez qu'une ressource peut également être divisée sur des contextes distincts (tels que Accounts.User et Payments.User).

(https://hexdocs.pm/phoenix/Mix.Tasks.Phx.Gen.Json.html)

Dans votre cas, vous avez généré un module de contexte API dans lib/my_app/api/api.ex.

Vous pouvez renommer API module de contexte à quelque chose comme contenu.

== Compilation error in file lib/my_app_web/views/content_asset_view.ex == 
** (CompileError) lib/my_app_web/views/content_asset_view.ex:2: module MyAppWeb is not loaded and could not be found 
    (elixir) expanding macro: Kernel.use/2 
    lib/my_app_web/views/content_asset_view.ex:2: MyAppWeb.ContentAssetView (module) 
    (elixir) lib/kernel/parallel_compiler.ex:121: anonymous fn/4 in Kernel.ParallelCompiler.spawn_compilers/1 

Sur la base de votre message d'erreur, le plus probable est pas défini le module MyAppWeb.

Pour plus de ressources d'apprentissage sur le contexte:

https://www.youtube.com/watch?v=tMO28ar0lW8&feature=youtu.be&t=12m21s

https://martinfowler.com/bliki/BoundedContext.html

http://phoenixframework.org/blog/phoenix-1-3-0-released