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
               1234
            567891011
            12131415161718
            19202122232425
            2627282930  
            << November 2017 >>
            Selected entry
            PR
            Category
            Archives
            Recent comment
            • マクドナルドで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
            • マクドナルドでYahoo BBモバイルポイント 公衆無線LANサービスがつながらない
              bob77777
            Recent trackback
            • スマートフォンの法人活用例
              無線LANネットのブログ
            • Yahoo!オークションからのアフィリエイト収入が一気に70%減になってしまい涙目になってる話
              特選情報
            Recommend
            Link
            Profile
            Search
            Others
            Mobile
            qrcode
            Powered
            無料ブログ作成サービス JUGEM