content【全6回】Laravel5.8でTwitterっぽいSNSツールを作る(第3回ユーザ関連とフォロー機能)PHPTwitterLaravelLaravelで始めるTwitter風(Twitterクローン)のSNSツール開発チュートリアル概要スクールとかの課題だったりLaravelを初めてみたいけど何を作ろうって迷ってる人向けによくあるTwitter風のWEBサイトを作ってみます。【全6回】Laravel5.8でTwitterっぽいSNSツールを作る(第6回コメントといいね機能)第3回はユーザ関連とフォロー関連の機能を追加していきます。5.8Controllerを作成MVCで中枢の役割を担うControllerを作成していきます。)を予め決められた処理を簡潔にできる機能のことです。LaravelではartisanコマンドでControllerファイルを生成するとき後ろに--resourceと付けることでResourceに対応したControllerを自動的に生成してくれます。言葉で言っても難しいと思うのでtweetsで表してみたいと思います。※{tweet}の部分はIDが入ります。ツイート削除処理Conrollerで書くとこうなります。)参考にしました🙇‍♂️Laravelのリソースコントローラを理解して使ってみよう!では早速Resourceを利用してUsersControllerを作成していきます。--resourceこれでapp/Http/Controllers/にUsersController.phpが生成されたと思います。作成したControllerのアクションとルートを紐づけていきましょう!RoutingLaravelではControllerのアクション(メソッド)に紐づける際はroutesのweb.phpに記述します。'UsersController');});このクロージャーの中にルートを設定することでログインした時にしかアクセス出来ないようにします。//});Resourceを使ったことない人なら記述これだけで済むの??って思うかもしれませんが、ResourceControllerにすることでシステムが自動的にそれぞれのアクションに紐づけてくれます。'UsersController');今回のユーザ機能では一覧/詳細/編集/更新のみを使用するので第3引数にonlyと記述して使うアクションのみを設定しましょう。'update']]);これでRoutingの設定は終わりです。UsersControllerのindexに書いていきます。Controllerユーザを取得するgetAllUsers()というメソッドにログインしているユーザIDを引数で渡しています。Modelから返ってきた結果をViewに返します。後で使うので色々useしておきます。}}メソッドインジェクションindex()の引数はどこから来たの??って思うかもしれません。LaravelにはDI(依存性の注入)というのが内蔵されており、メソッドの引数にインジェクトしたいオブジェクトを書くだけで、そのインスタンスが使用できます。$user->getAllUsers(auth()->user()->id);}つまり下記の様にわざわざインスタンスを発行する必要がなく、Userクラスに依存されないということです。$user->getAllUsers(auth()->user()->id);}もちろんメソッド単位ではなく__constructに書くコンストラクタインジェクションというのもあります。話が逸れたのでModelにメソッドを書いていきます。Model引数で受け取ったログインしているユーザを除くユーザを1ページにつき5名取得しています。}Viewresources/views/にusersというディレクトリを作成し、そのディレクトリ内にindex.blade.phpファイルを作成してください。自身の環境で/usersを叩けばこの様に表示できているはずですフォロー関連の処理では作成したユーザ一覧画面にフォローする機能とフォローを解除する機能ついでにフォローされているかの処理を書いていきます。フォロー/フォロー解除/フォローされているかControllerフォローとフォロー解除はresourceのどのアクションにも該当しないので、独自に追加します。}View先ほど記述したindex.blade.phpにコードを追加しただけなので、そのままコピペでもいけます。(auth()->user()->isFollowing($user->id))Routing先ほど設定したresourceのルーティングの下にフォロー/フォロー解除のアクションも紐づけておきます。'UsersController@unfollow')->name('unfollow');});一覧表示(フォロー/フォロー解除/フォロー関係)これでフォロー関連は終わりです。フォロー/フォロー解除したりして試してみてください。ログアウトして別のユーザに切り替えてフォロー関係も確かめてみてください。ここまでと言いたいがこのままだと後3回で終われる気がしないので、もう少し頑張ります。😨😨ユーザ詳細画面この画面では以下の内容を実装していきます。総ツイート数/フォロー数/フォロワー数の表示ユーザがツイートしたタイムラインの表示。😱😱しかし先ほど作った一覧画面で使った処理を使いまわしていくのでそこまで大変ではないと思います!Controller$login_userは自身の情報です。これを元にプロフィールが自身か別のユーザかを判定します。$userと被るのであえて$login_userにしました(ネーミングセンス皆無)その$login_userを元にフォロバ関連の判定をしています。$timelinesはユーザのツイート情報、$~~countってついてるのがカウント関連です。}ModelUserUser.phpの処理は先ほどのメソッドを使うので省略します。}Viewshowresources/views/users/の中にshow.blade.phpファイルを作ってください。</div></div>@endsectionついでに外枠のレイアウトのlayouts/app.blade.phpも修正していきます。アイコンを使用したいのでFontAwesomeのSDNを読み込むのとツイッターっぽくメニューバーに画像を追加しました。)Rule::unique('users')->ignore($user->id)の部分はユニークに設定しているscreen_nameやemailを自身のIDの時だけ無効にするという設定です。これを設定しておかないとバリデーションで弾かれてしまいます。}Model$paramsの中に画像があれば処理を分けています。$params['profile_image']->store('public/profile_image/');こうすることで画像ファイルが/storage/app/public/profile_image/に保存されます。}Viewresources/views/users/の中にedit.blade.phpファイルを作ってください。</div></div>@endsection一旦これで更新は完了です!アカウント名や画像を更新して確認してみて下さい!しかし保存した画像を読み込むために/storage/app/public/profile_image/にシンボリックリンクを設定しないといけないのでシンボリックリンクを設定します。シンボリックリンクとは簡単に言うと、ショートカットのようなものです。あるファイルやフォルダにシンボリックリンクを貼ることで、別のパス(別の場所)にあるファイルやフォルダを参照する事が出来ます。シンボリックリンクを設定する必要は??Laravelのドキュメントルート(アプリケーションを公開するときに参照されるフォルダ)がpublicになっています。そのpublicフォルダにファイルや処理の全てが集約されています。そのため保存した画像もpublicディレクトリ内に存在しないとアクセスする事ができません。利用してstorageディレクトリにアクセスできるようにします。sshでプロジェクトのフォルダに移動して以下のコマンドを叩いてください。それだけで勝手にpublicフォルダにstorageのシンボリックリンクが作成されます。upLoginユーザーは見つかりませんでした。