サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ドラクエ3
laravel10.wordpress.com
今回は、モデルで1対nのリレーションを扱いたいと思います。ユーザーが複数の記事を持つ様に、User モデルと Article モデルを関連付けます。 Model UserモデルとArticleモデルを1対nで関連付けます。 User // app/User.php class User extends Authenticatable { ... public function articles() { return $this->hasMany('App\Article'); } } articles() メソッドを作成し、hasMany() メソッドで Article と関連付けます。 これで以下のように User に関連付く Article をn件取得できるようになります。 $articles = User::find(1)->articles(); Article // app/Ar
今回は記事にタグを付与する機能を追加します。この機能の実装で、多対多のリレーションを学びます。 ブログをやっている方にはお馴染みかと思いますが、タグの仕様は以下のようになります。 記事には複数のタグが付与できる(記事1件に対して、タグn件) タグは複数の記事を持てる(タグ1件に対して、記事n件) 記事は複数のタグに属する タグは複数の記事に属する 続きを読む →
PHPStorm等の IDEを使って Laravelの開発を行う時に便利な laravel-ide-helper を紹介します。 Laravelではファサードを多用するのですが、IDEはファサードを補完することが出来ません。laravel-ide-helperは ヘルパーファイルを作成することで、IDEがファサードを補完出来るようにするパッケージです。 https://github.com/barryvdh/laravel-ide-helper 例えば、下記の routes.phpファイルを編集している時、”Route::po” を入力したら、”post” を補完候補に表示欲しいのですが、出てきません。それどころか、”Route” に警告を意味する下線が表示され、Undefind Classと警告されたりします。laravel-ide-helper を使うと、警告が表示されなくなり、ファサ
Laravel 5.1では、5.0の時に標準で入っていた Bootstrap3の認証用のビューが削除されてしまいました。CSSフレームワークは必ずしもBootstrap3を使うわけでは無いのは分かるのですが、これはこれでちょっと不便になった気もします。 そこで、認証用のビューを簡単にセットアップできる bestmomo/scafold パッケージを紹介します。 https://github.com/bestmomo/scafold インストール composer でパッケージをインストールします。 composer require bestmomo/scafold:dev-master config/app.php にサービスプロバイダーを登録します。 Bestmomo\Scafold\ScafoldServiceProvider::class, Publish viewやassetsをパ
Elixirを使って、Bootstrap3をセットアップします。 Bowerのインストール CSSやJavaScriptといったフロントエンド用のパッケージ管理ツールの Bower をインストールします。Bowerはnpmを使ってグローバル環境にインストールします。 npm install -g bower Bowerを初期化して、bower.jsonファイルを作成します。 質問には全てリターンキーを押して、デフォルト回答します。 bower init Bowerの詳細は公式サイトをご覧ください。 http://bower.io/ Bootstrapのインストール Bowerを使ってBootstrapをインストールします。 ここでは、Sass版のBootstrapをインストールします。 bower install bootstrap-sass-official --save bower_c
CSSやJavaScriptファイルを更新しても、ファイル名が同じ場合、ブラウザがそれらををキャッシュしたままで、更新が反映されないことがあります。この問題を解決する為に、Elixirではファイル名にバージョンを付与することが出来ます。 gulpfile.jsに、タスクを定義します。 // gulpfile.js var elixir = require('laravel-elixir'); elixir(function(mix) { mix.version([ 'css/app.css', 'js/app.js' ]); }); mix.version()は、引数で指定されたファイル名にユニークなバージョンを付与します。引数で指定されたファイルは、public ディレクトリにあるとみなします。バージョンを付与されたファイルは、public/build ディレクトリ以下に出力されます。
Elixirを使って、LessやSassをCSSへ変換してみます。また、複数のCSSファイルの結合も試します。 Less resources/assets/less ディレクトリ以下に、lessファイルを作成します。 // resources/assets/less/app.less @title-color: red; h1 { color: @title-color; } gulpfile.jsに、タスクを定義します。 // gulpfile.js var elixir = require('laravel-elixir'); elixir(function(mix) { mix.less('app.less'); // ① }); ① の部分にタスクを定義します。 mix.less()は、引数で指定されたlessファイルをCSSに変換し、public/css/app.cssに出力しま
XAMPP環境のMySQLを立ち上げ、Laravel のDB設定を済ませ、migrationを実行したら、エラーになりハマリました。 $ php artisan migrate [PDOException] SQLSTATE[HY000] [2002] No such file or directory XAMPP環境のMySQLに接続するにはDBの設定で “unix_socket” を指定する必要があります。 .env // ... DB_SOCKET=/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock // ... config/database.php // ... 'mysql' => [ // ... 'unix_socket' => env('DB_SOCKET', null), ], // ...
Laravel 5.1 がリリースされました。 http://laravel.com/docs/5.1/releases https://laravel-news.com/blog/ リリースノート意訳 # LTS(長期間サポート) バグの修正:2年間 セキュリティー対応:3年間 # PHP 5.5.9+ PHPの5.5.9以上のバージョンが必要になります。 # PSR-2 PSR-2のコーディングスタイルが採用されました。 生成されるコードもPSR-2スタイルが適用されるようになりました。 # Documentation ドキュメント、サンプルコードが改善されました。 # Event Broadcasting 多くのモダンなウェブアプリケーションで、ユーザインターフェースをリアルタイムに更新する為に、WebSocketが使われています。サーバ上でデータが更新された時、WebSocketの
Laravel 5.1 のイベント機能を試してみます。 ユーザー登録の完了イベントを発行し、そのイベントを受けてウェルカムメールを送信してみます。 イベントとリスナーの登録 app/Providers/EventServiceProvider.php にイベントとイベントリスナーを登録します。 <?php // app/Providers/EventServiceProvider.php namespace App\Providers; ... class EventServiceProvider extends ServiceProvider { protected $listen = [ 'App\Events\UserWasRegistered' => [ // ① イベント 'App\Listeners\SendWelcomeMail', // ② リスナー ], ]; ... }
前々回、ユーザー登録処理をコントローラからJobクラスに抽出して、再利用可能にしました。今回はコンソールコマンドを作ることで、コントローラ以外の場所でJob Busを使う方法を試します。 ※ Laravel 5.0の Command Busは v5.1で Job Busに変更されました。 お題 コンソールコマンドを作成して、コンソール端末上でユーザー登録を可能にします。コンソールコマンドの中で、Job Bus経由でJobクラスを実行します。 前々回の復習 以下のJobクラスを作成しました。このクラスがあることを前提に進めます。 <?php // app/Commands/RegisterUser.php namespace App\Jobs; use App\Jobs\Job; use App\User; use Illuminate\Contracts\Bus\SelfHandling;
Command Busの使い方をレビューしている動画があるので、紹介します。 ***** Laravel v5.0で追加された、Command Busは、v5.1でQueueと統合されて、Job Busに変更されました。この動画は Laravel v5.0リリース前のプレビュー動画で、内容が古いです。 しかし、v5.1でもコマンドバスパターンとしてのJob Busは使えるのに、マニュアルに説明がありません。この動画とv5.0のCommand Busのマニュアルは非常に貴重な情報源ですので、見ておく価値はあります。 ***** Laracasts にある Laravel 5 Preview: Commands です。Previewとなっているのは、Laravel5が正式にリリースされる前の動画だからです。 https://laracasts.com/lessons/laravel-5-com
Laravel v5.0で追加された、Command Busは、v5.1でQueueと統合されて、Job Busに変更されました。今回はこのJob Busを試してみます。 Laravel 5.1では非常に残念なことに、マニュアルにQueueの説明はあるのですが、Job Busの記述がありません。Command Busパターンとしての使い方が抹消されてしまいました。ララ帳ではCommand Busパターンに注目してるので、引き続きJob Busとして掲載します。 お題 Laravel 5.1に標準装備されている、ユーザー登録処理はAuthControllerに実装されています。コントローラーはドメイン駆動設計として見ると、プレゼンテーション層にあたります。ここにビジネスロジックが実装されていると、コントローラの中でしかロジックが使えず、再利用ができません。例えば、ユーザーを登録するコンソール
Laravelの質問がしたくても、何処で質問してよいか分からなくて、困ったことはありませんか?日本ではまだ、Laravelに関する Q&A の良い場所が育っていないように思います。であれば、皆でそのような場を育てませんか? ララ帳がおすすめするのは、スタック・オーバーフロー です。 http://ja.stackoverflow.com/ 英語圏では非常にメジャーなサイトで、プログラミングに関して検索した事がある方は、何度も目にしているかと思います。そのサイトの日本語版サービスが 2014年12月から始まっています。 幾つかある Q&A サイトの中から、何故「スタック・オーバーフロー」をおすすめするかというと、そのサイトの哲学、ポリシーが素晴らしく、共感させられるからです。 職業プログラマーから週末プログラマーまで プログラミングに情熱をそそぐ人のための Q&A サイト 目標は、プログラミ
Laravel5 から cronの代わりにコマンド実行の計画をソースコードで指定できるようになりました。 スケジューリング app/Console/Commands/Kernel.php にコマンド実行計画を記述します。 <?php namespace App\Console; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; class Kernel extends ConsoleKernel { // ... protected function schedule(Schedule $schedule) { $schedule ->command('auth:clear-reminders') // artisan command
Laravel5でターミナル端末から実行可能なコマンドラインアプリケーションを作成してみます。Laravelでは artisan を拡張することで、コマンドラインアプリケーションを実装します。 今回作成するコマンド Userテーブルを検索しユーザ名の一覧を表示するコマンドを作成します。オプションの指定によって、件数だけを表示することも可能とします。 $ php artisan user:list harry ron hermione $ php artisan user:list --count 3 コンソールコマンドクラスの生成 artisanを使って、コンソールコマンドクラスを生成します。 php artisan make:console ListUser app/Console/Commands/ListUser.php が以下の様に生成されます。 <?php // app/Cons
※ 2015/06/10にv5.1のリリースがありました。バグ修正、セキュリティー対応の期間が当初の発表より1年短くなりました。 企業や、チームでフレームワークを選択する際に、LTSがあると安心できます。LTSを提供するということは、メジャーになった証ですね。
Laravelでは標準でジョブキューを使用することができます。ジョブキューを使って、時間の掛かる処理を非同期で実行することができます。簡単なサンプルを作って、実際に試してみたいと思います。 ドライバー Laravel5で利用できるキューのドライバーは以下の6種類あります。 sync: デフォルト設定で、実際には同期処理として動きます database: データベースをジョブキューとして使います beanstalkd: beanstalkd オープンソースのジョブキューです sqs: Amazon Simple Queue Service 有料サービスです iron: ironMQ 有料サービスです redis: Redis オープンソースのKVSです 今回はすぐに使える database を使ってキューを試します。 環境設定 キューの設定で使用するファイルは以下の2ファイルです。 .env
【前篇】に続いて、今回もユーザー登録機能に確認メールの送信を追加するカズタマイズを進めます。 進捗確認 【前篇】では、基本的なユーザー登録、ログインを実装した後に、以下の2点をカスタマイズしました。 ユーザー登録直後に確認メールを送信 確認メール内のURLにアクセスして、ユーザー確認を完了 【後編】では、以下の2点を追加します。 確認メールからのユーザー確認が済んでいない時、ログイン出来ないようにする。 確認メールの再送を可能にする。 ミドルウェアでフィルタリング # ミドルウェアの作成 確認メールからのユーザー確認が済んでいるかどうかをチェックするミドルウェアを作成します。 php artisan make:middleware VerifyConfirmed app/Http/Middleware/VerifyConfirmed.php が作成されるので、以下のように編集します。 <?
Laravel 5.1 では標準でユーザー登録機能がコントローラとして提供されています。しかし、この機能には、確認メールを送る機能が付いていません。今回はユーザー登録に、確認メールの送信機能を追加し、メールアドレスがユーザー登録した本人の物であることを確認できるようにカスタマイズします。 環境設定 データベースとメール送信の環境設定を行います。 初めてのLaravel 5.1 : (6) データベースの環境設定 メールの環境設定 ユーザー登録、ログインの実装 # マイグレーション 標準で提供されている、users, password_resets テーブルを作成します。 database/ └── migrations ├── 2014_10_12_000000_create_users_table.php └── 2014_10_12_100000_create_password_res
Laravel5を学ぶのに非常に有効な動画を紹介します。 Laracastsにある Laravel 5 Fundamentals です。 https://laracasts.com/series/laravel-5-fundamentals ***** Laravel 5.0から 5.1へのバージョンアップで、結構変更があったので、この動画の内容はもう古いです。それでも、この動画を見ることに価値はあります。ぜひ、時間を取ってこの動画を見てください。そして、公式ドキュメントを見ながら、実際にプロジェクトを作って手を動かしてください。Laravelを覚える為の近道となります。 以下のコマンドで Laravel 5.0をインストールすることができます。 composer create-project laravel/laravel PROJECT_NAME 5.0 --prefer-dist リ
前回はサービスプロバイダーの仕組みを既存のコードを追って理解しました。今回は自分でサービスプロバイダーを作成して、その中でサービスコンテナへサービスを登録してみます。 サービスの作成 まずは、簡単なサービスを作成します。 app/Servicesディレクトリに Messengerディレクトリを作成し、Messengerサービスと位置付けます。Messengerインターフェースと、その実装である MailMessenger, BikeMessengerクラスを作成します。 <?php // app/Services/Messenger/Messenger.php namespace App\Services\Messenger; interface Messenger { public function send($message); } <?php // app/Services/Mess
Laravelはサービス毎に初期処理を定義し、実行する仕組みを持っています。 その仕組や、実際に初期処理の実装を行うクラスのことをサービスプロバイダーと言います。 では、実際のコードを追いながら、理解を深めたいと思います。 サービスプロバイダーの登録 サービスプロバイダーの登録箇所は config/app.php になります。 Laravelに Composerを使って、パッケージをインストールした事のある方は、 そのインストール手順に従って、app.phpにサービスプロバイダーを登録したことがあるかと思います。 <?php // config/app.php // … return [ 'providers' => [ /* * ① Laravel Framework Service Providers... */ Illuminate\Foundation\Providers\Arti
※1 … Lumenのドキュメントには無いが、使えるっぽい物。 ※2 … Command Bus は、Queueと統合された? 目立ったところでは、以下の機能が Lumen には無いようです。 Command Bus(Queueと統合?) Elixir 思いのほか、Laravel の大部分の機能が使えることがわかります。 ディレクトリ構成にみる違い # Laravelのディレクトリ構成 [x] が付いているものが、Lumenで無くなったディレクトリです。 Laravel ├── app │ ├── Commands [x] │ ├── Console │ │ └── Commands │ ├── Events [x] │ ├── Exceptions │ ├── Handlers [x] │ │ ├── Commands [x] │ │ └──
前々回、前回とサービスコンテナについてやって来た続きです。今回はサービスコンテナを使った、クラスのインスタンス生成と依存性の注入を試してみます。 クラス名でのインスタンス生成と依存性注入 インターフェースでの依存性注入 タイプヒントによる依存性注入 これらの機能は、これこそがLaravelの正体と言っても過言では無いくらい、あちらこちらで使われています。とても重要な機能です。 クラス名でのインスタンス生成と依存性注入 実は、サービスコンテナの make() メソッドでインスタンスを取得する際にクラス名を渡すと、事前にバインドしていなくてもクラスのインスタンスを取得することができます。 // app/Http/routes.php /* * Class */ interface SenderInterface { public function send($message); } class
Laravel 5.1 のサービスコンテナはクラス間の依存性を管理する為の仕組みです。以前に「依存性の注入」に書いた、DIコンテナにあたるのが Laravel のサービスコンテナです。今回は簡単なサンプルを使って、サービスコンテナの基本的な仕組みを理解したいと思います。 クラス定義(準備) サンプルコードで使用するクラスを定義します。 // app/Http/routes.php /* * Class */ interface SenderInterface { public function send($message); } class MailSender implements SenderInterface { public function send($message) { // ここで、メールでメッセージを送る return "メールで $message を送りました。"; }
Zendのサイトに「PHP7のインフォグラフィック ー あなたが知るべき5つの事」というページがあります。このページによると、PHP7は2015年の10月にリリース予定とのことです。 https://pages.zend.com/TY-Infographic.html 個人的にPHP7で追加される機能で一番嬉しいのは、関数の戻り値の型宣言ができるようになる事と、引数の型宣言がスカラー値でもできるようになることです。これが実現されると関数に予期せぬ値が渡されてデバッグに苦労するとか、そのような事が無いようにコードでチェックしたりといったが無くなります。 昨年、FacebookからPHPを拡張したHack言語が発表ましたが、その中に静的な型付け機能がありました。その辺に刺激を受けたのかも知れません。 2015年はPHPにとって素晴らしい年になりそうです。
Resoruce Controllere Laravel では Controller を作成する際に –resource オプションを指定するとデフォルトで以下のようにメソッドが作成されます。このメソッドが上記のパターンに基づいて命名されています。 例として、PostsController.php を作成してみます。 php artisan make:controller PostsController --resource <?php // app/Http/Controllers/PostsController.php namespace App\Http\Controllers; use Illuminate\Http\Request; class PostsController extends Controller { /** * Display a listing of the
前回は記事の新規登録後に表示される記事一覧を修正しました。今回は、記事の編集画面を追加します。編集画面のフォームは新規登録画面のフォームとほぼ同じな為、View の Partial 機能を使って、フォームを共通部品化してみます。 Routing ルートを追加します。 // routes/web.php Route::get('articles', 'ArticlesController@index'); Route::get('articles/create', 'ArticlesController@create'); Route::get('articles/{id}', 'ArticlesController@show'); Route::post('articles', 'ArticlesController@store'); Route::get('articles/{id}/e
次のページ
このページを最初にブックマークしてみませんか?
『ララ帳 | PHPフレームワーク Laravel の学習帳』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く