質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

4031閲覧

laravel(blade)でviewのキャッシュを使うシステムにおいて viewの一部分をにキャッシュしないようにしたいです。

kaji

総合スコア648

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/08/07 18:46

編集2016/08/09 04:17

smartyでいうところのinsertタグのようなものです。

viewのcacheは以下のようにしてます。

php

1namespace App\Http\Controllers; 2 use App\Http\Requests; 3 use Illuminate\Http\Request; 4 use Illuminate\Support\Facades\Cache; 5 class IndexController extends Controller 6 { 7 public function index() 8 { 9 if (Cache::has('html')) { 10 return Cache::get('html'); 11 } 12 $ret = view('index', $this->_data)->render(); 13 Cache::put('html', $ret, 10); 14 return $ret; 15 } 16 } 17

テストモデルの
Hoge.phpは以下のように記載しました。

php

1-app/Hoge.php 2namespace App; 3class Hoge { 4 public static function name() 5 { 6 return "tarou"; 7 } 8}

bladeにもあるかなと思ってみてみました。
@injectがそれっぽいなと思い使ってみたのですが
戻り値がキャッシュされてました。
@inject('hoge', 'App\Hoge')
{{ $hoge::name() }}

その他以下のように試したのですが、すべて戻り値がキャッシュされてました。

{!! $hoge::name() !!}

<?= App\Hoge::name() ?>

storage/cacheのデータを覗いてみましたが、戻り値"tarou"が固定値でやはり入ってました。
storage/cacheのテンプレート内に<?= App\Hoge::name() ?>な感じで出力されていれば
多分大丈夫なんだろうと思うのですが、そのような方法はありますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

$ret = view('index', $this->_data)->render(); Cache::put('html', $ret, 10);

これだと出力をすべてキャッシュしているので、そうなるでしょう。
キャッシュが残る10分間はすべてのアクセスに対して同じ表示をして問題ない場合にこのやり方は使えるでしょう。

部分的にアクセスによって表示を切り替える場合は工夫が必要で、
この場合のベストプラクティスはわかりませんが、思いつく方法を2つ。

1.出力をキャッシュするのではなく、コントローラ内の重い処理結果をキャッシュする。
$heavyList = Heavy::get();
Cache::put('heavyList', $heavyList, 10);

2.出力はキャッシュして、jsで出し分ける
表示しない情報も出力するので注意

cakePHPだとやりたいことができるみたいですが、Laravelで同様のことができるという情報はみつかりませんでした。
http://www.hideblog.net/nikkis/show/186/

自分で工夫すればできるかもしれません。

投稿2016/08/19 15:42

lightwill

総合スコア962

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kaji

2016/08/20 10:45

cakeだとできるのですね。 いろいろ調べていただいてありがとうございます。 提案いただきました2点についても検討していきたいと思います。 lightwillさんのおかげて一歩先に進めた気がします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問