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

RSP87
I’m working on a project that simulates the bumbl example in the programming phoenix book. It acts almost like an email client. We have a...
New
kszambelanczyk
Hello! Could someone please give me a help/sample code, how to delete a file from s3 using waffle/waffle_ecto from Phoenix app. I creat...
New
RemyXRenard
I’m seeing that a list inside a Kino.DataTable will be interpreted as a charlist, even if the Kino.configure() is set to charlists: :as_l...
New
velrest
So my question is quite simple and i have found no conclusive answer on forum, google or AI. Should we use :erlang.float for Integer to ...
New
samoloth
Hi, I’ve just set up an application with ash_authentication. There is only magic link strategy for now, so there is no confirmation add o...
New
FlyingNoodle
If a change or preparation module uses Ash.Changeset.get_argument/2 or Ash.Query.get_argument/2 (or any of the other get_argument functio...
New
nseaSeb
Hello, I know there is an approach for handling lists that allows for optimized traversal, but I can’t recall the specific method (somet...
New

Other Trending Topics Top

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
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Dmk
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge &amp; Solve. They are GUI (Emerge) and State management (S...
New
netoum
Corex is an accessible, unstyled UI component library for Phoenix that integrates Zag.js state machines using Vanilla JavaScript and Live...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews