元スレ[PHPフレームワーク]Laravel
php覧 / PC版 /みんなの評価 :
501 = :
コントローラーじゃなくて、モデルからブレードにわたしてんの?なして?
503 = :
こんなふうにテンプレートを定義して
public $layout = 'template';
こんな風に渡すといいよ
$this->layout->content = View::make('ビュー名', array('results' => $results, 'arg2' => $arg2));
この場合$resultsが配列の場合は
@foreach($results as $val)
ごにょごにょ
@endforeach
みたいな感じで取れる。
504 = :
laravel-debugbar 入れれば見れた気がする
505 = :
>503さん
ありがとう。
1. $templateを定義して、¥View::makeの戻り値をcontentsに値を代入している理由
2. ¥View::makeを使う理由
がわかりません。
contensにブレードが生成したhtmlが入ってるよということでしょうか?
506 = :
>504さん
レスありがとうございます!
debugbar入れてみた。
IDE使ってるからこういうブラウザに機能追加されるようなデバッグツールの使い道がよくわからん。
クエリビルダだと実行されたクエリがわからないので、それが気軽にみられるようになるとこは気に入った。
Debug::info();で出力するってことでしょうか?
507 = :
>>505
意味は使ってみたらわかる。
まずやってみるよろし。
上の例ではtemplate.blade.phpで{{@$content}}って書けばあとは作成したビューで値が取れる。
View::makeでビューの作成と、ビューに渡す配列を同時に設定してんだね。楽だね。
つまり「ビュー名.blade.php」で@foreach($results as $val)とかすればいいってことだね。
508 = :
あ、テンプレートを作る理由はもちろん各パーツのモジュール化が楽だから。
ヘッダーとか、フッターとか、ビュー作るごとにわざわざ付けるの面倒でしょ。
全部テンプレート経由で設定しとけば、変更も楽よ。
509 = :
>507,508さん
すごい!
テンプレート作る理由の解説、滅茶苦茶分かりやすくて涙出そうです。
ありがとうございます。
ただやってみたのですがうまくはいきませんでした。
環境はlaravel5で、上記例の$this->layout->content = View::make(…とするとプロパティがないようでエラーが発生します。
予めtemplate.blade.phpに何か仕込んでおく必要があるのでしょうか?
510 = :
ごめん、5はまだ試してないんだw
PostController.phpを作る。
class PostController extends BaseController { //http://example.com/post
public $layout = 'template'; // これtemplate.blade.php
public function getIndex($id) // getでhttp://example.com/post/<id>でアクセスした場合
{
$results = Post::where('id', $id)->get(); // 適当にPostモデルで定義したデータベースから値取得
$hoge = "hoge"; // 解説のために、こんなパラメータも追加
$this->layout->content = View::make('post', array( // ここでpost.blade.php
'results' => $resultsCashe,
'hoge' => $hoge
));
}
template.blade.php作る。
//なんか適当にヘッダーとか
{{@$content}}
//サイドバーとかフッターとか
post.blade.php作る。
@foreach($results as $val)
e($val->post_title); //例えば投稿のタイトルとか出力
@endforeach
全体こんな感じ
512 = :
$results = モデル名::all()->where(条件)->pagenation(1ページ表示件数);
として取得したオブジェクトをビューで表示すると
@foreach($results as $val)
{{$val->カラム名}} ・・・表示できない(値がnullになっている)
{{$val['origin']['カラム名']}} ・・・表示できる
{{$val->created_at}} ・・・表示できる
@endforeach
{{$results->render()}} ・・・表示できる
という結果になりテーブルの値がビューに渡せません。
created_atはcarbonという仕組みのおかげで表示できているだけのようです。
例えばコントローラ側を$results = モデル名::all()->where(条件)->pagination(1ページ表示件数)->toArray();
とすれば普通に連想配列で値は取れますが
@foreach($results as $val)
{{$val['カラム名']}} ・・・表示できる
{{$val->created_at}} ・・・表示できない
@endforeach
{{$results->render()}} ・・・エラーが発生してしまう
今度はページネーションが使えなくなってしまいます。
どうやるのが正解なのでしょうか?
513 = :
>>506
普通にViewsタブ内の各ビューをクリックすれば、そのビューの持ってる変数見られるでしょ
514 = :
質問の続き(510)を先に書き込んでしまいました。すみません。。。
>510さん
完全に理解できました!ありがとうございます。
用途としては画面共通で使う検索条件のプルダウン用配列なんかをtemplateで読み込んでおくような使い方でいいのでしょうか?
515 = :
>513さん
ありがとうございます。
私の環境だと配列を渡すと配列名しか見えません。
516 = :
用途は思いつく限りなんでもいいんじゃない?
上で書いたとおりヘッダーやフッターを設定しとくのが一般的だろうけども。
例えば特定の画面で、メニューバーの表示非表示をコントロールしたいとかの場合は
$this->layout->menubar = View::make('menubar', array('flag' => 'true'));
みたいにすればフラグも渡せるし。
まあなんていうか、自由w
517 = :
度々すみません。
510の件まだ解決できず悩んでいます。
ビューに渡したコレクションからアロー演算子でテーブルの値を取得し、さらにrender()でpaginationを生成するにはどのようにしたらよいのでしょうか。
2ちゃんねるの皆さんのお知恵をかしてください。環境はlaravel5です。
522 = :
本当にその方法で値が取れないなら、モデルか、データベースの設計が間違ってる。
例えばPostというモデルを作る場合は、こんなかんじだよ。
class Post extends Eloquent {
protected $guarded = []; // 複数のカラムからデータを取得するため
protected $table = 'posts';
}
protected $table = 'posts'は省略可能だけど、自動でモデル名+sになるから注意。
データベースについてはちゃんとモデル名に対応したテーブルがあること、
配列で返って来るだけの複数の投稿があることを確認かなぁ。
っていうか$val['original']ってのがさっぱりわからん。
たぶんどっかで凡ミスしてる。
523 = :
がーど
524 = :
>>520
> ブレード側で{{ $val->カラム名 }}とした場合は値は取得できず
> {{ $val['original']['カラム名'] }}とすることで値が取得できました。
モデルにおかしなミューテーターを書いてるだけのように見えるが
525 = :
みゅーてーたー?
526 = :
>>525
ごめん >>524 はミューテーターじゃなくてアクセサーだ
original 経由で正しい値が読み取れるのなら
アクセサーかアクセサーを呼び出すどこかに問題があるんじゃないかとね
527 = :
518です。
>522、521、522さん
ありがとうございます!!
原因が判明しました。どうやらモデルにカラムと同名のプロパティを定義したことが原因だったようです。
ガード、ミューテタがヒントになりました。
528 = :
検証するときは考えられる最も単純な記述で値が取れるか調べるといいよ。
「ここはあってるはず」ってのが一番の天敵。
529 = :
>528さん
アドバイスありがとうございます。
530 = :
っていうか、ミューテーターとかアクセサーとか初めて聞いた。
一般的に使われる言葉なの?
531 :
使われてるんじゃね?
アクセサーのことを
ゲッター/セッターの両方をさす場合(rubyとかrubyとかrubyとか)もあるから、
少しややこしいけど。
532 = :
やっぱり5.1からEloquentとIlluminate¥SupportのCollectionのlistsメソッドは
arrayじゃなくCollectionを返すようになったんだな
しかしQueryBuilderのlistsはarrayのままという謎仕様
こういうのホントやめてほしいんだがな
534 = :
そういう時はプルリクかイシュー書いてみんなで良くしていこうよ
535 = :
laravl取り入れてる人や会社はレベルが高くて丁寧なイメージあるね。
海外でも活発に情報がやりとりされてるし。
あんま素人が手を出しにくいってのもあるかもしれんけども。
536 = :
ねーよそんなイメージ。
てかララベルを業務に採用している会社なんてあるんかw
537 = :
すまんな、ここ数年俺が納品した会社はlaravel運用だ
538 = :
普通にあるだろ。しらねーなら黙ってろ田舎もん。
539 = :
Laravelの賞味期限は、あと何年くらいかな・・・
541 = :
CodeIgniterをずっと使ってきましたが、ちょっとだけ新しいフレームワーク
に興味を持ち始めました。
Laravelって良いですか?
10年以上運用保守するシステムにも安心して使えますか?
CodeIgniterから乗り換えた方、Laravelの良さを教えてください。
542 = :
今回の長期保証でも2年とかじゃね?
WordPressみたいなもんだよ。ころころ更新される。
良さはコンポーサーとか、restfulなモデルとか、OAuthとか、新しい技術をどんどん取り入れること。
だから長期運用が目的なら向かないだろうね。
ちなみに10年同じバージョンで運用保守可能なフレームワークなんてないから。
CentOSですら無理じゃね?w
543 = :
getメソッドとpostメソッドを別に扱う点だな。
最初は戸惑うだろし、混在したコードを書いてしましがちだが、徹底して分離するべし。
もうcodeIgniterには戻れん。
547 = :
特定のディレクトリ(今回は、pc)だけに聞く外部ファイルを置きたいです
↑
これの意味が何回読んでもわからんw
聞くが「効く」でも「きく」でもさっぱりわからん
内部でpublic以下のファイルを指定したいだけなら、そんな関数が用意されてるでしょ。
みんなの評価 :
類似してるかもしれないスレッド
- symfony PHPフレームワークpart2 (530) - [60%] - 2022/4/10 22:45
- 【PHP】フレームワーク Akelos (129) - [60%] - 2019/5/9 7:46
- 【PHP】フレームワークPharonスレ (306) - [57%] - 2022/10/10 20:00
- [PHP][フレームワーク]CodeIgniter Part2 (983) - [56%] - 2015/4/7 12:46
- [PHP][フレームワーク]CodeIgniterスレ (983) - [53%] - 2011/3/5 23:17 ○
- 【PHP】フレームワークMapleに舌鼓 (470) - [48%] - 2017/12/31 9:31
- 【PHP】PHPフレームワーク総合スレ15 (989) - [42%] - 2013/9/27 6:00 △
トップメニューへ / →のくす牧場書庫について