拯救Phoenix.MissingParamError并返回用户的json

时间:2017-06-06 14:05:31

标签: elixir phoenix-framework

我在Phoenix应用程序中的一个控制器中执行了以下操作:

      plug :scrub_params, "account"
      plug :scrub_params, "studio"

      def create(conn, %{"account" => account_params, "studio" => studio_params}) do
      end

当某人没有发送正确的params时,app会返回Phoenix.MissingParamError错误。我怎样才能解救它并在json中向用户返回好消息?

2 个答案:

答案 0 :(得分:2)

你可以创建另一个函数头来处理这种情况。像这样的东西,也许

def create(conn, %{"account" => account_params, "studio" => studio_params}) do 
  # handle request
end

def create(conn, params) do 
  # handle missing param
end

答案 1 :(得分:1)

也许您可以使用Plug.ErrorHandler。像这样的东西。

function languages_top_bar(){
    $languages = icl_get_languages('skip_missing=0&orderby=code');

    if(!empty($languages)) : ?>

       <div id="top_bar_language_list" class="topbar-language-switcher">

       <ul>
            <li class="menu-item-first"><a href="#"><?php echo ICL_LANGUAGE_NAME; ?></a>

            <ul class="sub-menu">

           <?php
            foreach($languages as $l) {
                echo '<li class="sub-menu-item">';
                if($l['country_flag_url']){
                    if(!$l['active']) echo '<a class="flag" href="'.$l['url'].'">';
                    echo '<img src="'.$l['country_flag_url'].'" height="12" alt="'.$l['language_code'].'" width="18" />';
                    if(!$l['active']) echo '</a>';
                }
                if(!$l['active']) echo '<a href="'.$l['url'].'">';
                echo icl_disp_language($l['native_name'], $l['translated_name']);
                if(!$l['active']) echo '</a>';
                echo '</li>';
            }

            echo '</ul></li>';
            ?>

    <?php endif; ?>
    <?php echo '</ul></div>'; 
}