まず、私は をPHPフレームワークとMVCで初めて動作させていると言いたいと思いますが、まだ私の問題に対するすべての答えが見つかりませんでした。私は現在、Laravel 5.3を使用しています。PHP MVC理解ヘルプ(Laravel 5.3)
問題:私は、ユーザーがログインできるページといくつかのページ(私はLaravel Authを使用しています)を持っていて、毎回同じサイドバーがあるページがたくさんあります。それから、私はすべてのページに異なる内容(about、articles、...)を持っています。私は最も重要なことは、コードを2度書くべきではないということだと聞きましたが、問題があります。このサイドバーには、ユーザーにコンテンツを表示する "サービス"がありますが、認証されたユーザーからのユーザーデータを必要とするアルゴリズムがあり、Auth関数はLaravel 5.3のServiceProviderまたはBaseControllerでは使用できません。さあ。
私の質問はどうやってそれをきれいにすることができるのですか?
それをよりよく理解するためのいくつかのコードは:
ルート:
Route::get('/community/ranking', 'Pages\[email protected]');
Route::get('/community/advertising', 'Pages\[email protected]');
Route::get('/logout', '[email protected]');
Route::get('/home', 'Pages\[email protected]');
その後、私はすべてのページこのページのコンテンツ提供専用のコントローラ持って(サイドバーのを除いて - はまだありませんソリューションを) 。
にHomeController:
<?php
namespace App\Http\Controllers\Pages;
use App\Http\Controllers\BaseController;
use Redis;
use App\Http\Requests;
use Request;
use Shoutbox;
use User;
class HomeController extends BaseController
{
function getView()
{
$shoutboxData = $this->getShoutboxData();
return view('pages.home', compact('shoutboxData'));
}
private function getShoutboxData()
{
$shoutbox = Shoutbox::orderBy('time', 'DESC')->skip(0)->take(15)->get();
if(count($shoutbox) > 0)
{
foreach($shoutbox as $entry)
{
$getUser = User::where('id', '=', $entry->user_id)->first();
$entry['username'] = $getUser->username;
$entry['look'] = $getUser->look;
$shoutboxData[] = $entry;
}
}
else
{
$shoutboxData = null;
}
return $shoutboxData;
}
public function systemMessage()
{
$redis = Redis::connection();
$redis->publish('chat.message', json_encode([
'msg' => 'System message',
'nickname' => 'System',
'system' => true,
]));
}
}
今、私はそれぞれのビューを提供し、独自のコントローラと(たとえば、一言ボックス用、ニュース)このページのコンテンツは、そのコントローラでもあります。 (私の意見ではそれほど清潔ではありませんでしたが、より良い方法は見つけられませんでした。
私はすべてのコントローラでサイドバーコンテンツを提供できますが、これは私が望むものではありません。どうやってやるの?私はMVCを使用していますか?
ありがとうございます!
私はそれを知っていますが、データをビューにプッシュする必要があります。そして、私はそれをどのように行うことができるかを知りたいと思っています。 –