検索フォームの作り方。
<form class="form-horizontal" method="post"> <div class="form-group"> <label for="number" class="control-label col-xs-4">年月</label> <div class="col-xs-3"> <select class="form-control" id="number" name="yyyymm"> <option value="">選択してください</option> <option value="201805">201805</option> <option value="201806">201806</option> <option value="201807">201807</option> <option value="201808">201808</option> <option value="201809">201809</option> <option value="201806">201810</option> <option value="201811">201811</option> <option value="201812">201812</option> </select> </div> </div> <form class="form-horizontal" method="post"> <div class="form-group"> <label for="number" class="control-label col-xs-4">部署</label> <div class="col-xs-3"> <select class="form-control" id="number" name="department"> <option value="">選択してください</option> <option value="xxxx部">xxxx部</option> <option value="yyyy部">yyyy部</option> <option value="zzzz部">zzzz部</option> <option value="hoge部">hoge部</option> <option value="fuga部">fuga部</option> <option value="aaaa部">aaaa部</option> </select> </div> </div> <div class="form-group"> <label for="name" class="control-label col-xs-4">名前</label> <div class="col-xs-3"> <input type="text" class="form-control" id="name" name="name" placeholder="名前を入力してください"> </div> </div> <div class="form-group"> <div class="col-xs-offset-2 col-xs-7"> <button type="submit" name="submit" class="btn btn-block">検索</button> </div> </div> </form>
こんな感じ。
エントリを使う処理の書き方
sub capture_entry :Chained('/') :PathPart('') :CaptureArgs(1) { my ( $self, $c, $entry_id ) = @_; if (my $entry = $c->model('DB::Hoge')->find($entry_id)) { $c->stash->{entry} = $entry; } else { $c->stash->{template} = 'not_found.tt'; } } sub jump_entry :Chained('capture_entry') :PathPart('jump') :Args(0) { my ( $self, $c ) = @_; my $entry = $c->stash->{entry}; # counterを1増やして更新 $entry->counter($entry->counter + 1); $entry->update; $c->res->redirect($entry->url);
Bootstrap
Bootstrapを使うときのおまじない。
<!doctype html> <html lang="ja"> <head> <meta charset="utf-8"> <!-- viewport meta --> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> </head> <body> <h1>Hello, Bootstrap 4!</h1> <!-- jQuery、Popper.js、Bootstrap JS --> <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> </body> </html>
2018/06/11
Caught exception in Hoge::Controller::Root->signup "Can't open '' for input: ãã®ã‚ˆã†ãªãƒ•ã‚¡ã‚¤ãƒ«ã‚„ディレクトリã¯ã‚ã‚Šã¾ã›ã‚“ at /usr/local/lib64/perl5/YAML/XS.pm line 46."
上記エラーの原因が判明。
__PACKAGE__->config( "Plugin::ConfigLoader" => { file => __PACKAGE__->path_to(qw(etc hoge.conf)), driver => { "General" => { -ApacheCompatible => 1, -UTF8 => 1 } } }, name => "Hoge", disable_component_resolution_regex_fallback => 1, );
lib/Hogr.pmに上記コードを入力したところ解決。
エラー文を元に論理的に考えた結果、上記コードを入力すれば解決すると導き出せないところがプログラマーとしてまだまだ未熟だと感じた。
2018-06-08
Can't locate Catalyst/Plugin/FormValidator/Simple.pm in @INC (@INC contains: /home/xxx/xxxxxx/script/../lib /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/local/share/perl5/Catalyst/ScriptRole.pm line 90. Compilation failed in require at /usr/local/share/perl5/Catalyst/Utils.pm line 309.
上記のようなエラーが出る時って、大抵モジュールがインストールされていないだけ。
Caught exception in Hoge::Controller::Root->signup "Can't open '' for input: ãã®ã‚ˆã†ãªãƒ•ã‚¡ã‚¤ãƒ«ã‚„ディレクトリã¯ã‚ã‚Šã¾ã›ã‚“ at /usr/local/lib64/perl5/YAML/XS.pm line 46."
原因不明のエラーが発生中。
XS.pm内でファイルの呼び出しが失敗しているので、yamlディレクトリ内のファイルに問題がありそう。
検索機能を実装する際のコードの書き方について
検索機能を実装した当初、年月・部署・名前を全て指定しないと正常に検索結果が表示されなかった。
いずれかの項目が入力されなかった場合でも、条件一致するテーブルを表示させるために下記のようなコードを書いた。
sub kikaito :Local { my ( $self, $c ) = @_; $c->stash->{kikais} = [$c->model("DB::Kikai")->all]; my $params = $c->req->params; if ( !($params->{yyyymm}) && $params->{department} && !($params->{name})){ $c->stash->{kikais} = [$c->model("DB::Kikai")->search({ department => $params->{department}})]; } elsif (!($params->{yyyymm}) && $params->{department} && ($params->{name })) { $c->stash->{kikais} = [$c->model("DB::Kikai")->search({ department => $params->{department}, name => $params->{name}})]; } elsif (!($params->{yyyymm}) && !($params->{department}) && ($params->{name})) { $c->stash->{kikais} = [$c->model("DB::Kikai")->search({ name => $params->{name}})]; } elsif ( $params->{yyyymm} && !($params->{department}) && $params->{name}) { $c->stash->{kikais} = [$c->model("DB::Kikai")->search({ yyyymm => $params->{yyyymm}, name => $params->{name}})]; } elsif ( $params->{yyyymm} && $params->{department} && !($params->{name})) { $c->stash->{kikais} = [$c->model("DB::Kikai")->search({ yyyymm => $params->{yyyymm}, department => $params->{department}})]; } elsif ( $params->{yyyymm} && !($params->{department}) && !($params->{name})) { $c->stash->{kikais} = [$c->model("DB::Kikai")->search({ yyyymm => $params->{yyyymm}})]; } }
とても見辛い、、
絶対もっと良い書き方があるよねと同期と話してた。