PHPでいろいろな種類の改行コードを簡単に配列に格納する。のは”R” がよさそう。

PHPでいろいろな種類の改行コードを簡単に配列に格納する。のは“R” がよさそう。

参考
http://php.net/manual/ja/regexp.reference.escape.php

そのままですが。

$lines = preg_split('/R/',$text);

$textはテキストエリアなどに入力された文字を想定。
win/macどちらからでも

Laravelで任意の場所(親コントローラー)などで強制リダイレクトする方法。

Laravelで任意の場所(親コントローラー)などで強制リダイレクトする方法。

ふつうのコントローラーだと。アクションで return して上げればリダイレクトできる。

    function restore($request){
        ・
        ・
        return Redirect::route("item.index")->with('message', '登録しました。'); 
    }

ただ、親のコントローラーや別のメソッドからだとできない場合は以下の様にする。

    function hoge(){
        Redirect::route('item.index')->withErrors(['redirect'=>'エラー発生'])->throwResponse();
    }

Redirect(ファザード)の実態は。IlluminateRoutingRedirector で、
route()->withErrors()を実行した戻り値は。IlluminateHttpRedirectResponse
その RedirectResponseクラスのthrowResponse();を実行している流れ。

Laravel5.5で、一覧ページのPaginationにソートを追加する。(sort,orderby)

Laravel5.5で、一覧ページのPaginationにソートを追加する。(sort,orderby)

こちらを使わせてもらいました。

kyslik/column-sortable
https://github.com/Kyslik/column-sortable

まずはcomposerでインストール。

$ composer require kyslik/column-sortable

config/app.phpの providersに追加


    'providers' => [

        /*
         * Laravel Framework Service Providers...
         */
        IlluminateAuthAuthServiceProvider::class,
        IlluminateBroadcastingBroadcastServiceProvider::class,
        IlluminateBusBusServiceProvider::class,
            ・
            ・
            ・
            ・
        /*
         * paginate sortable ※こちら
         */
        KyslikColumnSortableColumnSortableServiceProvider::class,

    ],

モデルに追記。

<?php

namespace App;

use IlluminateDatabaseEloquentModel;
use SymfonyComponentHttpFoundationRequest;

use KyslikColumnSortableSortable; //※ここと。

class User extends Model
{    
    use Sortable;  // ※ココ

ビューは以下の様に

<th>@sortablelink('email','メールアドレス')</th>

Laravelで簡単にExcelからのCSVを読み込んで処理したい。

Laravelで簡単にExcelからのCSVを読み込んで処理したい。

Goodby, CSV
https://github.com/goodby/csv#requirements

composer.json のrequireに“goodby/csv”を追加。

"require": {
    "goodby/csv": "*"
}

して、composerをアップデート

$ composer update
$ composer dump-autoload

モデル、ライブラリをuseして使う。

app/ItemCsv.php
<?php
namespace App;

use IlluminateDatabaseEloquentModel;

use GoodbyCSVImportStandardLexer;
use GoodbyCSVImportStandardInterpreter;
use GoodbyCSVImportStandardLexerConfig;

class ItemCsv extends Model
{
    
    protected $table = 'items'; 
    
    public static function import($path){
    
        $config = new LexerConfig();
        $config->setToCharset("UTF-8");
        $config->setFromCharset("sjis-win");
        $interpreter = new Interpreter();
        $tmp = array();
        $interpreter->addObserver(function(array $row) use (&$tmp) {
            $tmp[] = $row;
        });
        $lexer = new Lexer($config);
        $lexer->parse($path, $interpreter);
        dd($tmp);
    }
    
}

あとは、何処かしらから。

ItemCsv::import($path_to_csv_file);

LaravelのRouterでドットシンタックスで指定する’name’が登録されない。

LaravelのRouterでドットシンタックスで指定する’name’が登録されない。

解決した方法。

//routes/web.php
Route::post('item/import/confirm',['as'=>'item.import.confirm','uses'=>'ItemController@importConfirm']);

‘as’ で指定する。実行先は ‘uses’

ルート一覧確認方法

$ php artisan route:list

脱jQuery $.proxy(fn,this)の代わりに fn.bind(this)

脱jQuery $.proxy(fn,this)の代わりに fn.bind(this)

jQueryのときは、Class内部のメソッド呼び出し時に$.proxy()をつかってましたが、bind()が楽。

class Foo {

    constructor(){
        $('#btn1').on('click',this.onClick1);
        $('#btn2').on('click',$.proxy(this.onClick2,this);
        $('#btn3').on('click',this.onClick3.bind(this));
    }   
    onClick1(e){
        console.log(this); //thisのスコープが #btn1のElementになる。
    }
    onClick2(e){
        console.log(this); //thisのスコープがclass Fooになる。
    }
    onClick3(e){
        console.log(this); //thisのスコープがclass Fooになる。
    }

}


Laravelのモデル(Eloquent)にバーチャル(仮想/カスタム)フィールドを追加する($appends)

Laravelのモデル(Eloquent)にバーチャル(仮想/カスタム)フィールドを追加する($appends)

CakePHPのバーチャルフィールドの様な仮想のフィールドの設定方法。

class User extends Model
{
    protected $appends = ['name'];
    public function getNameAttribute()
    {
        return $this->lastname. ' ' .$this->firstname;
    }
    ・
    ・
    ・
  1. $appends にフィールド名を追加。
  2. getXxxAttributeというメソッドを追加。

あとはビューで。以下の様に参照するだけ。

$user->name;

Veu.jsの “v-for” 繰り返し部分での双方向データバインディング(data-binding , v-model)

Veu.jsの “v-for” 繰り返し部分での双方向データバインディング(data-binding , v-model)

が、うまく行かなく、始めたところでなかなか情報も見つけにくかったのでメモがてら。

<div id="items">
    <table>
             <tr v-for="(cut,index) in items">
                <td>アイテム{{ index+1 }}</td>
                <td>
                        <input class="u-wd200 u-mr10" name="mst_cut" v-model="items[index]"/>
                </td>
            </tr>
    </table>
</div>

Laravelでバリデーションをモデルにまとめて記載する。

Laravelでバリデーションをモデルにまとめて記載する。

LaravelでRESTfulなルーティングをしていまいした。

  1. items/create 新規作成画面
    2.POST送信(POST items/ )
    3.カスタムリクエストでバリデーション)
    →エラー発生時に自動で items/create にリダイレクト
    4.items/create 画面にエラー表示

大きな不満はなかったのですが、3の瞬間になにかしたくなる。or リクエストファイルを作るのが面倒そうなどあり、Modelに無理やり書いてみた。

<?php

namespace App;

use IlluminateDatabaseEloquentModel;
use SymfonyComponentHttpFoundationRequest;
use Validator;

class Products extends Model
{
    
    /**
     * create Validator Instance
     *
     * @param  IlluminateHttpRequest $request
     * @return IlluminateValidationValidator
     */
    
    public static function getValidator(Request $request)
    {
        $validator = Validator::make(
            $request->all(),
            [
                'name' => 'required',
                'jan' => 'required',
            ],
            [
                'name.required' => '名は必須項目です。',
                'jan.required' => 'JANコードは必須項目です。'
            ]
            );
        return $validator;
    }
    
}

まぁさほどモデルがコードが増えることは無さそうなので、これである程度シンプル・手が届きやすくなりそう。(カスタムリクエストにする方がベストプラクティスっぽくあるが、お一人開発なのでとりあえず。

Laravel5.5 $requestの _tokenや、_methodを簡単に省いて保存する方法。

add,store,update,editなどのアクションで、$requestを受け取って保存するのですが、_token/_methodなどの保存には関連しないフィールドを、Modelへとデータを一つ一つ移していると大変だったので。

※validationとか全く無考慮です。(実際は入力チェックを

public function store(Request $request)
{
    $client = new Client;
    $params = $request->except('_token'); //_tokenを除いて配列取得
    $client->setRawAttributes($params);
    $client->save();
    return Redirect::route("clients.index");
}   
public function update(Request $request, $id)
{
    $params = $request->except(['_token','_method']);
    Client::where('id',$id)->update($params);
    return Redirect::route("clients.index");
}

Page 13 of 46

Powered by WordPress & Theme by Anders Norén