ariandanim

ariandanim

Dear all,

I try to figured out does Phoenix support subfolder → subfolder in folder lib such as :
lib
→ myapp_web
→ controller
→ subfolder (for controller and html.ex)
→ page_controller.ex
→ page_html.ex
→ subfolder (for html)
→ home.html.heex

I try this but showing error message, perhaps someone could help the right way. Tks

Showing Posts 1 to 10

LostKobrakai

LostKobrakai

You want to post that here as well.

Generally elixir and phoenix do not care how you organize your files, but in phoenix certain features mostly around templates need to require knowledge around where related files are stored. Those might require change in configuration when you move them around.

ariandanim

ariandanim OP


this structures folder i try to create Sir

i got this error

[info] GET /frontend
[debug] Processing with MyappWeb.Backend.BlogController.index/2
  Parameters: %{}
  Pipelines: [:browser]
[info] Sent 500 in 61ms
[error] ** (UndefinedFunctionError) function MyappWeb.Backend.BlogController.index/2 is undefined or private

my code in router like :

  scope "/", MyappWeb do
    pipe_through :browser

    resources "/frontend", Backend.BlogController
  end

my code in blog_controller.ex like :

defmodule MyappWeb.Backend.BlogController do
	use MyappWeb, :controller

	def home(conn, _params) do
		render(conn, :home, layout: false)
	end
end

my code in blog_html.ex like :

defmodule MyappWeb.Backend.BlogHTML do
	use MyappWeb, :html

	embed_templates "frontend/*"
end

my code in blog_index.html.heex like :
<h1>Headline</h1>

Do i miss something ?

hauleth

hauleth

I am pretty sure, that embed_templates do not find your frontend directory (because how it would guess where to look). It either needs to be sibling directory of blog_html.ex or you need to specify full relative path (aka ../frontend).

ariandanim

ariandanim OP

please show me the right code Sir.. T_T

hauleth

hauleth

embed_templates "../frontend/*"
sodapopcan

sodapopcan

The error is saying it can’t find BlogController.index/2 which is true, you only have a home/2 function in there. I’m assuming you router has something like this:

get "/blog", BlogController, :index

You need to make an index/2.

Also, you will probably have to change render to:

render(conn, :blog_index)
ariandanim

ariandanim OP

I just skip for a while and try to understand the guide from phoenix framework when create product.

When in the guides show us created product_html folder inside controller, the product_controller.ex and product_html.ex also inside in controller, so i try to make custom folder like this structure

but i got an error in product_html.ex line 12 “def product_form(assigns)” I don’t know how to solved this @hauleth , @sodapopcan , @LostKobrakai

Compiling 2 files (.ex)
    error: implementation not provided for predefined defp product_form (overridable 1)/1
    │
 12 │   def product_form(assigns)
    │       ^
    │
    └─ lib/myapp_web/controllers/backend/product/product_html.ex:12:7: MyappWeb.Backend.Product.ProductHTML (module)


== Compilation error in file lib/myapp_web/controllers/backend/product/product_html.ex ==
** (CompileError) lib/myapp_web/controllers/backend/product/product_html.ex: cannot compile module MyappWeb.Backend.Product.ProductHTML (errors have been logged)

my code in product_html.ex just like this :

defmodule MyappWeb.Backend.Product.ProductHTML do
  use MyappWeb, :html

  embed_templates "frontend/product/*"

  @doc """
  Renders a product form.
  """
  attr :changeset, Ecto.Changeset, required: true
  attr :action, :string, required: true

  def product_form(assigns)
end
al2o3cr

al2o3cr

For someone who is just starting on the guides, Phoenix is complicated enough when you’re staying on the “standard path”. Trying to force a nonstandard directory structure is going to make it harder to tell when you’re encountering a “learning the framework” problem versus a “custom organization” problem.

Beyond that, IMO the distinction doesn’t make a lot of sense - the code in the “frontend” directories is still compiled into functions that run 100% on the backend :man_shrugging:


As to your latest specific error:

The docs for Phoenix.Component.embed_templates suggest that this should work.

I was able to produce the same message without any Phoenix machinery at all:

defmodule Foo do
  defp foo_form(_arg), do: :ok
  defoverridable foo_form: 1

  def foo_form(_arg)
end

which gives the error:

** (CompileError) iex:8: implementation not provided for predefined def foo_form/1
    (elixir 1.13.0) src/elixir_erl_compiler.erl:12: anonymous fn/2 in :elixir_erl_compiler.spawn/1

However this doesn’t explain the error you’re seeing since embed_templates should be adding public functions, not private ones. :thinking:

ariandanim

ariandanim OP

https://github.com/ariandanim/myapp

You can see my code in github here, perhaps you can see some my code probably wrong.

ariandanim

ariandanim OP

it’s solved,
my fault, just revise code in product_html.ex in :

embed_templates “../../frontend/product_html/*”

Where Next? Top

Trending in Questions Top

katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
brecabral
Documentation While reading the Scoped Routes section, I noticed that the documentation currently refers to a problem without explainin...
New
achenet
Hello, I’m trying to build a basic Phoenix web-app, and I’d like to use Tailwind. However, when I launch mix phx.server, I get an error...
New
kpanic
Hi everyone, I am toying with the idea of building a “match maker” for giving personal help to people that wants to start coding. I sta...
New
asweet-confluent
I recently noticed that Elixir’s Logger defaults its primary log level to :debug when no :logger, :level application configuration is pre...
New
Cxx-mlr
I’m working on a small exercise involving update_in/3, and I came up with this solution: data = %{ name: "Periodic Table", category:...
New
ChrisAmelia
I’ve got trouble wrapping my head around the order in which functions are called in this snippet (from Phoenix’s authentication): toke...
New

Other Trending Topics Top

GenericJam
Edit: 2026 May 15 - This post is archived. Mob is alive!! Main docs: mob v0.7.11 — Documentation A bit of explanation for the slightly c...
New
JesseHerrick
Hey, I’m Jesse and I’m the main contributor behind Dexter, a full-featured, lightning-fast Elixir LSP optimized for large codebases. It s...
New
mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
mhanberg
Hi everyone! The first release candidate for the Expert language server project is now available! We’ve published a press release detai...
New
budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews