SessionのLifetimeの永続化。@Laravel5
用途
仕様によっては、Sessionをn分やm時間など有限にせず無限にしたい場合。
※厳密には、今回は「Browserが閉じるまで」
方法
設定ファイル
app/config/session.php
設定箇所
<?php // 略 //'expire_on_close' => false 'expire_on_close' => true // 略
注意点
expire_on_close
をtrue
にしたところで、PHPのガーベジコレクションは防げません。
gcの影響で、消えてしまうことはあります。cloud9だとありがち..?そんな印象。
そのため、念のためlifetime
も修正しておきましょう。
lifetime
の目安はシステムによりけりですが。。
LaravelCollectiveにカスタム関数追加してやったぞ @Laravel5.4
概要
HTMLにAnchor吐き出す関数なかったな。 →作るか
1. artisan
php artisan make:provider HtmlServiceProvider
2.その中身
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Html; class HtmlServiceProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { Html::macro('anchor', function ($text, $attrs = '') { $anc = '<a' ; if (is_array($attrs)){ foreach($attrs as $key => $value) { $anc .= ' ' . $key . '=\'' . $value . '\''; } } else { $anc .= $attrs; } $anc .= '>' . $text . '</a>'; return $anc; }); } /** * Register the application services. * * @return void */ public function register() { // } }
3. app.phpに追加
<?php //略 'aliases' => [ //略 // Custom Function 'CostomHelper' => 'app\lib\CostomHelper', ],
4. Usage
<?php {!! Html::anchor('<i class="ban icon"></i>パスワードを忘れた場合', ['href' => '/user/forgot', 'class' => 'ui negative basic button']) !!}
5.おわり
もう今日は頑張らない
文字列のUnique制約でエラー出るんやけど @Laravel5.4
お疲れ様です。
お遊びで、Laravel5.4でWebアプリ作成してるんですよ。
順調かと思ってたら、migrateでコケました。
stringにunique指定すると、コケる。
解決方法は以下です!
またまたリンク貼るだけになりましたが、大変助かりました。
AppServiceProviderをいじるんですよ!!!
カスタム関数をエイリアス使ってしまおうぜ。 @laravel5
以前、こんな記事を書きました。↓
これは確かに手段としてあるが、 Laravelチックではないな…と反省。
だったら もう少しLaravelチックに書こうじゃないかと。
上記記事と比べてみてください。
1. /app/lib/CostomHelper.php
ファイル名は適当で良いです。
<?php namespace app\lib; class CostomHelper { /** * Create link tag element for css * * @param string $file_name * @param bool $secure = false * @return string link_tag */ public static function asset_css($file_name, $secure = false){ if (is_array($file_name)) { $tag = ''; for ($i = 0; $i < count($file_name); $i++) { $relative_file_path = '/css/' . $file_name[$i] . '.css'; $tag .= self::make_tag($secure, 'link', $relative_file_path, ['rel' => 'stylesheet']) . PHP_EOL; } } else { $relative_file_path = '/css/' . $file_name . '.css'; $tag = self::make_tag($secure, 'link', $relative_file_path, ['rel' => 'stylesheet']); } return $tag; } /** * Create link tag element for javascript * * @param string $file_name * @param bool $secure = false * @return string script_tag */ public static function asset_js($file_name, $secure = false) { if (is_array($file_name)) { $tag = ''; for ($i = 0; $i < count($file_name); $i++) { $relative_file_path = '/js/' . $file_name[$i] . '.js'; $tag .= self::make_tag($secure, 'script', $relative_file_path, ['type' => 'text/javascript']) . PHP_EOL; } } else { $relative_file_path = '/js/' . $file_name . '.js'; $tag = self::make_tag($secure, 'script', $relative_file_path, ['type' => 'text/javascript']); } return $tag; } /** * Create link tag * * @param string $tag_header * @param string $relative_file_path * @param string $attr = ''(array) * @return string script_tag */ public static function make_tag($secure, $tag_header, $relative_file_path, $attr = '') { $file_full_name = asset($relative_file_path, $secure); $abs_file_path = public_path($relative_file_path); $timestamp = filemtime($abs_file_path); $tag_attr = ' '; if(is_array($attr)){ foreach ($attr as $key => $value) { $tag_attr .= $key . '="' . $value . '" '; } } else { $tag_attr .= $attr; } switch ($tag_header) { case 'link': $tag_file_name = ' href="' . $relative_file_path. '?' . $timestamp . '" '; $tag_end = ''; break; case 'script': $tag_file_name = ' src="' . $relative_file_path . '?' . $timestamp . '" '; $tag_end = '</' . $tag_header . '>'; break; default: $tag_file_name = ''; $tag_end = ''; break; } $tag_begin = '<' . $tag_header . $tag_file_name . trim($tag_attr) . '>'; $tag = $tag_begin . $tag_end; return $tag; } }
2. config/app.php
追記するよ
'aliases' => [ ... // Custom Function 'CostomHelper' => 'app\lib\CostomHelper', ],
こんな感じで使うよ
use 宣言しても良かったかも。
<head> <meta charset="utf-8"> <title>@yield('title')</title> <link rel="stylesheet" href="/assets/css/style.css"> {!! App\lib\CostomHelper::asset_css(['app', 'semantic.min']) !! {!! App\lib\CostomHelper::asset_js(['jquery.min', 'semantic.min', 'app']) !!} </head>
おいroutes.php どこ消えたんや。@Laravel 5.3~
CSRF_tokenのreflash!! @ laravel5.2
備忘録っす!!
Session::regenerateToken();
ってやるとリセットされるっす!!
フォームが作成されるごと(ページの呼び出しごと)に更新されるかと思ったんだがね…
独自Validation作っちゃお☆@Laravel5
お早うございます。 安定剤のせいで体調不良な空瓶です。
動機
LaravelのValidationってめっちゃ便利!でも変に組み合わせると見にくいし可読性に欠けてしまう。
→自分で作れるんやない?
概要
他サイトやQiitaにて似たような記事はありますが、備忘録も兼ねてまとめておきます。
1.既存のValidaterを継承したクラスの作成
2.Providerの定義と登録
3.使用
1.既存のValidaterを継承したクラスの作成
場所は任意です。
今回は app/Validator を作成して、その中に作ります。
(ディレクトリ名称を[Valdiators]にしようか迷いましたが、中身は1つだけなのでいいかな..複数作る予定もないし。)
<?php namespace App\Validator; class CustomValidation extends \Illuminate\Validation\Validator { public function validateCodeStringCheck($attribute, $value, $parameters) { if (ctype_alnum($value)) { if (ctype_alpha(substr($value, 0, 1))) { return true; } } return false; } }
この関数名ですが、[validate]はプレフィックスになっており、[codeStringCheck]というValidation名として使用します。
また、エラーメッセージの使用はValidation名をスネークケースにして使用します。(サンプルは後ほど。)
2.Providerの定義と登録
php artisan make:provider ValidatorServiceProvider
でProviderを作りましょう。atisanに頼ります。
そして、config/app.phpに追加します。
<?php ... 'providers' => [ ... App\Providers\ValidatorServiceProvider::class, // custom ],
3.使用
<?php namespace App\Http\Requests; use App\Http\Requests\Request; class CompanyRequest extends Request { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'mail_address' => 'email|required', 'company_code' => 'required|min:4|max:20|codeStringCheck', 'company_name' => 'required|max:20', ]; } public function messages() { return[ 'company_code.code_string_check' => '英字から始まる半角英数字の文字列を入力してください。' ]; } } php```