スポンサーサイト

2018.04.09 Monday
0

    一定期間更新がないため広告を表示しています

    category:- | by:スポンサードリンク | - | - | -

    lalala

    2016.11.13 Sunday 21:17
    0
      スクロールするかな

      ・repositoryでパラメータなかったらシステムエラーにするかな
      ・owlでテスト参考
      ・logo表示確認 → サイドバー固定やめようかね
      ・お知らせ確認
      ・modelをまとめる
      ・inputとreqの統一
      ・mock
      ・laravel ログ IPアドレス 端末
      Request::ip()



      ・コントローラーではやっぱり コンストラクタでつくった $this-> をつかおう
      blog.comnect.net/blog/131

      ルーティング
      prefixやドメイン名でグルーピングできたり、ルーティングでMiddlewareを足したりできるのでかなり優秀。
      LaravelCollectiveを使えばannotationで指定もできる。自分は使っていない。
      Middlewareというのはいわゆるフィルタ的な、共通の事前処理のようなもの。認証チェックとか
      ビューの共通変数を当てたりするのに使うことが多い。

      http://qiita.com/wrbss/items/6b8c80892299dc2ba5f2

      VIEWで ENV{'HOME_URL'}つかってるがどうやって設定してるんだっけ?
      http://qiita.com/wrbss/items/6b8c80892299dc2ba5f2

      ・view共通変数
      コンストラクタで以下のように書くと blog.index、blog.show、blog.editのviewへ渡せると思います。
      public function __construct() {
      View::share('categories', 'カテゴリ');
      }

      たとえば特定の一連のURIにおいて同じビュー変数を設定したいときなどはView::share()を使う。
      View::share("name", "foobar");
      指定する場所としては、App::beforeとか、特定のフィルタなんかが考えられる。同じ処理を何度も書きたくないとか、フィルタで一度引っ張ったデータをコントローラで再度引っ張ってて無駄っぽいと感じた時などに使うと幸せになれるかもしれない。
      App::before(function($request)
      {
      View::share('something', Something::find(1));
      });


      http://syossan.hateblo.jp/entry/2014/05/26/104254
      こうやってるかの確認
      DB::transactionを使うとエラーになった場合自動でロールバックまで行ってくれるので便利ですねー!
      なので、LaravelでDB処理を書く際は以下のように書くのが良いみたいです。
      $table = Table::find(1);
      DB::transaction(function() use($table) {
      // InsertとかupdateとかのDB処理
      $table->save();
      });

      repositoryにエラー処理書いてないのが多いね

      こんな感じの画面を作るので以下のメソッドを用意することにします。

      index => 一覧画面表示処理
      create => 新規作成画面表示処理
      store => 新規作成処理
      edit => 更新画面表示処理
      update => 更新処理
      delete => 削除処理
      check => TODOをチェックする処理



      model
      app/Todo.php


      <?php namespace App;

      use Illuminate¥Database¥Eloquent¥Model;

      class Todo extends Model {

      protected $table = 'todos';

      protected $fillable = ['title', 'limit', 'done', 'user_id'];

      protected $dates = ['limit'];

      public function user()
      {
      return $this->belongsTo('App¥User');
      }
      }

      ルートパラメータが必須でない場合、後ろに?をつけます。
      routes.php
      Route::get('item/{id?}', function ($id = null) {
      return '商品ID: ' . $id;
      });


      idはvalue等ではなくurlに含んで送る(POSTの場合も)。
      削除(destroy)は、リンク(GET)ではなくPOSTで処理する。idはurlで送る。
      削除ボタンにbtn-destroyというクラスを追加。

      リクエスト参考かな
      http://qiita.com/zaburo/items/9fefa3f6834b2e79b734

      書き方さんこうに コメントとか
      https://github.com/bestmomo/laravel5-example/blob/master/app/Repositories/UserRepository.php




      owl
      request ではなく input で統一したほうがいいのかな?





      ツインバード サイクロンスティック型クリーナー スケルトンブラック TC-E123SBK
      ツインバード工業(TWINBIRD) (2012-09-14)売り上げランキング: 30



      続きを読む >>
      category:Laravel | by:ittoocomments(0)trackbacks(0) | -

      laravel middlewareで共通処理

      2016.11.13 Sunday 13:56
      0
        やること

        Middlewareを作成する
        作成したMiddlewareをKernelに追加する
        Middlewareを作成する

        今回はすべてのviewで使っているデータを渡すミドルウェアを作ってみる。

        $ php artisan make:middleware Views
        1
        $ php artisan make:middleware Views
        app/Http/MiddlewareにViews.phpが作成される。

        デフォルトがこれ。


        <?php

        namespace App¥Http¥Middleware;

        use Closure;

        class Views
        {
        /**
        * Handle an incoming request.
        *
        * @param ¥Illuminate¥Http¥Request $request
        * @param ¥Closure $next
        * @return mixed
        */
        public function handle($request, Closure $next)
        {
        return $next($request);
        }
        }

        <?php

        namespace App¥Http¥Middleware;

        use Closure;

        class Views
        {
        /**
        * Handle an incoming request.
        *
        * @param ¥Illuminate¥Http¥Request $request
        * @param ¥Closure $next
        * @return mixed
        */
        public function handle($request, Closure $next)
        {
        return $next($request);
        }
        }
        handle()にいろいろ追記していく。

        View::share()を使って、とりあえずログインユーザ名を渡してみる。


        <?php

        namespace App¥Http¥Middleware;

        use Closure;

        class Views
        {
        /**
        * Handle an incoming request.
        *
        * @param ¥Illuminate¥Http¥Request $request
        * @param ¥Closure $next
        * @return mixed
        */
        public function handle($request, Closure $next)
        {
        //ユーザ名をviewに渡す
        ¥View::share('username', ¥Auth::user()->name);

        return $next($request);
        }
        }

        <?php

        namespace App¥Http¥Middleware;

        use Closure;

        class Views
        {
        /**
        * Handle an incoming request.
        *
        * @param ¥Illuminate¥Http¥Request $request
        * @param ¥Closure $next
        * @return mixed
        */
        public function handle($request, Closure $next)
        {
        //ユーザ名をviewに渡す
        ¥View::share('username', ¥Auth::user()->name);

        return $next($request);
        }
        }
        ミドルウェアはこれでOK.

        MiddlewareをKernelに追加する

        ミドルウェアを作っただけでは呼べないので Kernel.php の $routeMiddleware に追記して呼び出せるようにする。

        app/Http/Kernel.php


        /**
        * アプリケーションのルートミドルウェアスタック
        *
        * These middleware may be assigned to groups or used individually.
        *
        * @var array
        */
        protected $routeMiddleware = [
        'auth' => ¥App¥Http¥Middleware¥Authenticate::class,
        'auth.basic' => ¥Illuminate¥Auth¥Middleware¥AuthenticateWithBasicAuth::class,
        'guest' => ¥App¥Http¥Middleware¥RedirectIfAuthenticated::class,
        'throttle' => ¥Illuminate¥Routing¥Middleware¥ThrottleRequests::class,

        /**
        * カスタム
        */

        //共通のview変数
        'views' => ¥App¥Http¥Middleware¥Views::class, // <- new
        ];

        /**
        * アプリケーションのルートミドルウェアスタック
        *
        * These middleware may be assigned to groups or used individually.
        *
        * @var array
        */
        protected $routeMiddleware = [
        'auth' => ¥App¥Http¥Middleware¥Authenticate::class,
        'auth.basic' => ¥Illuminate¥Auth¥Middleware¥AuthenticateWithBasicAuth::class,
        'guest' => ¥App¥Http¥Middleware¥RedirectIfAuthenticated::class,
        'throttle' => ¥Illuminate¥Routing¥Middleware¥ThrottleRequests::class,

        /**
        * カスタム
        */

        //共通のview変数
        'views' => ¥App¥Http¥Middleware¥Views::class, // <- new
        ];
        コントローラからミドルウェアを呼び出す

        ベースコントローラにて middleware(‘views’) を追加する。


        <?php

        namespace App¥Http¥Controllers;

        use Illuminate¥Foundation¥Bus¥DispatchesJobs;
        use Illuminate¥Routing¥Controller as BaseController;
        use Illuminate¥Foundation¥Validation¥ValidatesRequests;
        use Illuminate¥Foundation¥Auth¥Access¥AuthorizesRequests;

        class Controller extends BaseController
        {
        use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

        public function __construct()
        {
        $this->middleware('auth');

        $this->middleware('views'); //<- new
        }
        }

        <?php

        namespace App¥Http¥Controllers;

        use Illuminate¥Foundation¥Bus¥DispatchesJobs;
        use Illuminate¥Routing¥Controller as BaseController;
        use Illuminate¥Foundation¥Validation¥ValidatesRequests;
        use Illuminate¥Foundation¥Auth¥Access¥AuthorizesRequests;

        class Controller extends BaseController
        {
        use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

        public function __construct()
        {
        $this->middleware('auth');

        $this->middleware('views'); //<- new
        }
        }
        これでviewの中で {{$username}} が使える。



        ただ、

        この例だとユーザ名しか渡してないし、viewで {{¥Auth::user()->name}} とすれば解決するのであんまり恩恵がない…

        動的に変更する必要がある共通項目とかなら真価を発揮できる。

        パッと思いつくのはAPIコント


        http://tk2-207-13211.vs.sakura.ne.jp/2016/04/815/


        テスト
        削除OK
        削除NG
        存在チェックng
        存在チェックok
        UNIQOK
        他リンクOK
        search
        ソースみて各パターンをテストする
        grep input blade.common
        grep radio blade.common
        grep select blade.common
        Event_Controller_test.php


        // create
        // init
        // update
        // edit
        // destory
        category:Laravel | by:ittoocomments(0)trackbacks(0) | -

        laravel database.phpファイルが紛らわしい

        2016.11.06 Sunday 06:19
        0
          laravel database.phpファイルが紛らわしい

          config/database.php はデータベースに関する設定を行うファイルだが
          あくまでDB設定は .env ファイルで行う。
          database.phpには、デフォルト値が記してある。(.envに設定がない場合に参照する)
          よって、database.phpを変更すれば環境に反映されるわけではなく .envファイルを
          変更しないといけない

          mysql の接続情報の定義箇所に env(‘DB_HOST’, ‘localhost’) とあります。
          これが .env ファイルを参照している箇所です。
          第1引数で .env ファイル内に定義してあるKEY指定し、そのVALUE値を取得します。
          第2引数はデフォルト値で、.envファイルが無かったり、KEYが設定されていない時は
          デフォルト値を使います。
          category:Laravel | by:ittoocomments(0)trackbacks(0) | -

          laravel test

          2016.10.24 Monday 00:14
          0
            ・テストケースを作成する
            ・画面表示テスト
            ・inputtest
            1入力項目ごとのテスト
            ・必須チェック
            ・文字の型 ok 日本語の場合 
            ・文字の型 NG 日本語の場合など
            ・境界線テスト 最大値  の場合
            ・境界線テスト 最大値+1 の場合

            ・DBテスト
            ・実際にinsertしてちゃんと全部はいってるかのテスト
            ・deleteテスト
            ・repositoryのテスト
            これが結局DBテストになる
            repository のメソッドごとに作成
            テスト事前データの準備はどうする?


            ・phpunitはクラス単位のテスト
            ・excelで自動生成
            phpunit 入力テスト

            fuelPHPでバリデーションの単体テストをするにはどうするか?
            バリデーション専用のテストを別途用意する

            しかし会員登録完了なのにDBのレコードは作成されません。そう、7行目のuse DatabaseTransactionsの宣言により、
            レコードの作成を試みるもののDBのトランザクション機能を使用してわざと変更をロールバックさせています。
            これにより作成あるいは変更されたデータを手動で戻さずに、何回でもテストの実行が可能となるわけです。
            もちろん、トランザクション機能があるDB、mysqlならinnodbの使用でないとできないことです。


            PDOException laravel 文字化け

            $options = array(
            PDO::MYSQL_ATTR_READ_DEFAULT_FILE => '/etc/my.cnf',
            );
            $dbh = new PDO($dsn, $user, $password, $options);
            どうも開発環境では/etc/my.cnfに[client]に文字コードの
            指定があったから上手くいってたけど、本番環境では
            /etc/my.cnfに文字コードの設定がちゃんとされていないのが問題
            だったみたい。
            今回の本番環境は/etc/my.cnfを勝手に触れないので
            $PDO->query("SET NAMES utf8");
            で対応する。。



            postgresのエラーメッセージが文字化け
            PostgreSQLの設定ファイルを変更する

            1. 以下のファイルをテキストエディタで開きます。

            /etc/postgresql/8.4/main/postgresql.conf
            2. lc_messagesを検索します。既存の設定をコメントアウトして、lc_messages = 'C' で更新します。

            #lc_messages = 'ja_JP.UTF-8'
            lc_messages = 'C'
            3. PostgreSQLを再起動します。

            sudo /etc/init.d/postgresql restart
            以上で設定は完了です。エラーメッセージおよびログが英語で文字化けせずに出力されるはずです。
            my.conf

            http://stackoverflow.com/questions/23065602/laravel-unit-testing-how-to-check-validation-rules-or-classes
            class Student {
            public static $rules = array(
            'username'=>'required|alpha_num|min:6',


            $validator = Validator::make(array(
            "username"=>"john433",
            "firstname"=>"john",
            "lastname"=>"doe",
            "email"=>"johnerr@gmail.com",
            "password"=>"passtest",
            "password_confirmation"=>"passtest"
            ), Student::$rules);

            ---------
            $rules = array();
            $val = Validator::make($inputs, $rules); // 通常通り、インスタンスを生成

            // 条件付きバリデーション付加
            $val->sometimes('card_number', 'require|numeric|size:16', function($input) {
            return $input->paid == '1'; // 返却値がtrueの場合のみ、このルールを適用
            ));

            ---------

            テスト作成時のルール

             xUnitでのテストの実体はテストケースと呼ばれる1つのクラスです。
            1つのテストケースには、複数のテストメソッドを定義し、そのテストメソッドの中に、
            いくつかのアサーションとよばれる比較処理を記述します。

            テストケースは原則として1つのクラスに対して1つ作成します。テストするクラス名の末尾に「Test」という文字列を付与したものがテストケース名となりクラス名として定義します。

             また、ファイル名もテストケース名と同じでなければなりません。例えば、Employeeクラスをテストする場合のテストケースクラス名はEmployeeTestとし、ファイル名をEmployeeTest.phpとします。

            テストメソッドの命名規則は文字列「test」を接頭辞とすればよく、その後に続く文字列は任意でかまいません。ただし、何のテストであるかをメソッド名だけで認識できるように、メソッド名を自然言語で簡潔に命名にすることが推奨されています。

            ルール3:テストメソッドの名称は「test」で始まる文字列で、テスト内容が明確に判断できる名称にする

            例)testAddEmployeesFromObject()

              testFetchObjectWithFilter()

              testRemoveAllObjects()



            この準備と後始末の仕組みについてもPHPUnit側でテンプレートメソッドとして準備されています。親クラスから呼び出しのみ行われますので、子クラスであるテストケース内でメソッドを継承し、処理を実装しておけば、それぞれのタイミングで実行してくれます。メソッド名と実行のタイミングは以下の表のとおりです。

            メソッド名 実行のタイミング
            ・setUpBeforeClass() テストケース開始時
            ・setUp() テストメソッド実行前
            ・tearDown() テストメソッド実行後
            ・tearDownAfterClass() テストケース終了時

            setUpBeforeClass()とtearDownAfterClass()メソッドは1テストケースにつき1回しか実行されませんが、
            setUp()とtearDown()メソッドはそれぞれ実装されたテストメソッドの数だけ呼ばれるという点が違います。



            ●PHPUnitのアサーションメソッドの一例
            メソッド名 説明
            assertTrue($var) $varがTRUEである
            assertFalse($var) $varがFALSEである
            assertNull($var) $varがNULLである
            assertFileExists($file) $fileが存在する
            assertEquals($expect, $var) $varが$expectと等しい
            assertArrayHasKey($key, $array) 配列$arrayにキー$keyが存在する
            assertObjectHasAttribute($attr, $object) オブジェクト$objectにプロパティ変数$attrが存在する
            assertGreaterThan($expect, $var) $expect < $var が成立する
            assertGreaterThanOrEqual($expect, $var) $expect <= $var が成立する
            assertLessThan($expect, $var) $expect > $var が成立する
            assertLessThanOrEqual($expect, $var) $expect >= $var が成立する
            http://www.atmarkit.co.jp/ait/articles/0911/12/news105_3.html


            たとえばuserテーブルの中にemailフィールドがsally@example.comの値のレコードが存在するかを確認したいとしましょう。
            public function testDatabase()
            $this->seeInDatabase('users', ['email' => 'sally@example.com']);
            }


            ---------------------------------------------

            fakerでダミーデーター作成
            http://blog.asial.co.jp/1279

            laravelにはFakerがはじめから組み込まれています。なので、Seederの中で使うことでダミーデータが簡単につくれます。
            http://laravel4.winroad.jp/2014/05/29/faker%E3%81%A7%E7%B0%A1%E6%98%93%E3%82%B7%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0/


            app/database/seeds/PostsTableSeederを下記のように修正します。

            <?php
            // Composer: "fzaninotto/faker": "v1.3.0"
            use Faker¥Factory as Faker;
            class PostsTableSeeder extends Seeder {
            public function run()
            {
            $faker = Faker::create();
            foreach(range(1, 10) as $index)
            {
            Post::create([
            'title'=>$faker->word,
            'body'=>$faker->text
            ]);
            }
            }
            }

            11-12行:この2行を追加しました。-
            フィールド名=>$fakes->プロパティ名で指定します。
            コマンドプロンプトでシーダーを実行します。

            cd c:¥xampp¥htdocs¥laravel
            php artisan db:seed --class="PostsTableSeeder"


            Fakerのプロパティ一覧
            Fakerのプロパティは、下記の通りです。

            string

            name
            firstName
            lastName
            citySuffix
            streetSuffix
            buildingNumber
            city
            streetName
            streetAddress
            postcode
            address
            country
            latitude
            longitude
            phoneNumber
            company
            companySuffix
            creditCardType
            creditCardNumber
            creditCardExpirationDate
            creditCardExpirationDateString
            creditCardDetails
            bankAccountNumber
            word
            words
            sentence
            sentences
            paragraph
            paragraphs
            text
            email
            safeEmail
            freeEmail
            companyEmail
            freeEmailDomain
            safeEmailDomain
            userName
            domainName
            domainWord
            tld
            url
            ipv4
            ipv6
            dateTime
            dateTimeAD
            iso8601
            dateTimeThisCentury
            dateTimeThisDecade
            dateTimeThisYear
            dateTimeThisMonth
            amPm
            monthName
            date
            time
            dateTimeBetween
            md5
            sha1
            sha256
            locale
            countryCode
            languageCode
            randomLetter
            userAgent
            chrome
            firefox
            safari
            opera
            internetExplorer
            uuid
            mimeType
            fileExtension
            hexcolor
            safeHexColor
            rgbcolor
            rgbColorAsArray
            rgbCssColor
            safeColorName
            colorName
            int

            unixTime
            dayOfWeek
            month
            year
            century
            timezone
            randomDigit
            randomDigitNotNull
            boolean

            boolean
            mixed

            randomKey
            float

            randomFloat
            上記は、全て試したわけでは、ありませんが、いろんな種類のプロパティ(ダミーデータ)がありますね。

            只単にダミーデータを作成するのに、こんなに種類が必要かどうかはわかりませんが、興味のある方は試してみてください。

            Fakerのメソッド一覧
            randomNumber
            randomFloat
            randomElement
            numerify
            lexify
            toLowerbothify
            toUpper
            optional
            unique

            --------------
            Databaseのテスト
            Laravelは、データベース駆動のアプリケーション向けのテスト環境も提供しています。

            seeInDatabase()メソッドで、指定のデータが、データベースの指定のテーブルに含まれるかを判定


            http://am1tanaka.hatenablog.com/entry/2016/09/01/210049
            ---------
            category:Laravel | by:ittoocomments(0)trackbacks(0) | -

            laravel test

            2016.10.23 Sunday 04:33
            0
              ・requestの形を統一する
              Mockery;
              https://medium.com/laravel-4/laravel-4-controller-testing-48414f4782d0#.qreur0n73
              ・repositoriテスト
              http://www.developer.com/services/testing-controllers-in-laravel-with-the-service-container.html
              Mockery::
              クラス内でnewしないようにする
              http://tech.aainc.co.jp/archives/3918
              https://readouble.com/laravel/5.1/ja/testing.html
              ----------

              <?php

              namespace Formativ;

              use Illuminate¥Http¥Request;
              use Str;

              class PostRepository implements PostRepositoryInterface
              {
              public function __construct(Request $request)
              {
              $this->request = $request;
              }

              public function insert()
              {
              $data = [
              "title" => $this->request->get("title"),
              "subtitle" => $this->request->get("subtitle"),
              "body" => $this->request->get("body"),
              "author_id" => $this->request->get("author"),
              "slug" => Str::slug($this->request->get("title"))
              ];
              category:Laravel | by:ittoocomments(0)trackbacks(0) | -

              ad
              Calender
                12345
              6789101112
              13141516171819
              20212223242526
              2728293031  
              << May 2018 >>
              Selected entry
              PR
              Category
              Archives
              Recent comment
              • 円マークが自動変換されてる
                aaaaaa
              • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
                66hills
              • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
                ssd
              • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
                max
              • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
                DOM
              • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
                DOM
              • コンピュータ業界の根本的な変化
                cloud
              • コンピュータ業界の根本的な変化
                Dellの仮想化
              • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
                えちごや
              • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
                touch
              Recent trackback
              • スマートフォンの法人活用例
                無線LANネットのブログ
              • Yahoo!オークションからのアフィリエイト収入が一気に70%減になってしまい涙目になってる話
                特選情報
              Recommend
              Link
              Profile
              Search
              Others
              Mobile
              qrcode
              Powered
              無料ブログ作成サービス JUGEM