2016-07-12 17 views
2

私はevalを使ってデータベースから来るPHPコードを実行しています。コードはメタタグとページタイトルのためのものです。私はこの($のSEOを行うコントローラで、その後PHP、評価コードの結果が変数

$name . " test page title |".SiteSettings::getSiteNameAlternate(); 

そしてmeta_titleを持っているオブジェクトであり、その要素は、DBからの正確な文字列があります。一例としては、(これはテーブルに格納されている)、このようになります。 ):

$pageTitle = isset($seo->meta_title) ? @eval("echo $seo->meta_title") : null; 

私はLarevelフレームワークを使用しており、そのページタイトルをブレードテンプレートに渡しています。ブレードコード

<title>{{ isset($page_title) ? $page_title : SiteSettings::defaultPageTitle() }}</title> 

問題はエバールのエコーがページの上部にも表示されるためです。

print(ダム私は知っている)とprintfを使ってみました。動作しませんでした。その評価の値を画面に出力せずに変数に入れる方法はありますか?

+1

あなたはwahtに 'eval'を使用していますか?あなたはどこかで間違った順番を守っていないと確信していますか? – PeeHaa

+0

私はおそらく間違った方向に進みましたが、データベースからPHPコードを実行する他の方法はありません –

+0

DBからコードを実行することは一般的には悪い考えです。 evalからコードを実行することは、一般的には悪い考えです。それを行うために時々正当な理由がありますが、まれにしかありません。通常、人々はこのようなコードを書くと、開発者が変更を加えることなくエンド・ユーザーがコードをシステムに追加できる柔軟なCMSタイプのプラットフォームを作成しようとしています。これは開発者ではないにしても、誰がそのコードを書こうとしているのかという誤解に基づいています。設定可能なシステムが必要な場合、正しい方法はインストール可能なプラグインのシステムを経由することです。 – Simba

答えて

2
$pageTitle = isset($seo->meta_title) ? @eval("return $seo->meta_title;") : null; 

それ以外$seo->meta_titleが設定されている場合$pageTitle、およびnull$seo->meta_titleを割り当てます。

+0

正解ですが、私のページタイトルは次のようになります: $ name。 "テストページのタイトル|" .SiteSettings :: getSiteNameAlternate();

+0

@VladimirSabo更新されたコードを試してみてください。 – Jocelyn

1

あなたの質問が正しく理解できればechoの中にevalが実行されたため問題が表示されます。その代わりに、$seo->meta_titleの値を変数に格納してから、ビューをechoにしてください。

お使いのコントローラで

、ページタイトルissetかのように店のメタタイトル値、のob_start、ob_get_contentsであるあなたのビュー

<title>{{ isset($page_title) ? $page_title : SiteSettings::defaultPageTitle() }}</title> 
+0

ありがとうございます、あなたの答えは動作しますが、@ Jocelyn答えはよりクリーンです。また、ifステートメントに ")"がありません –

+0

ありがとう、それを修正しました。 – Chay22

0

結果を格納するための良い方法で、その後null

$pageTitle = null; 
if (isset($seo->meta_title)) { 
    $metaTitle = ''; 
    eval("\$metaTitle = \"$seo->meta_title\";"); 
    $pageTitle = $metaTitle; 
} 

ないとob_end_clean

/*start buffering;*/ 
ob_start(); 

eval(echo isset($seo->meta_title) ? $seo->meta_title : ""); 

/* now catch the Buffer of the eval */ 

$pageTitle = ob_get_contents(); 

/* pageTitle contains now the value of the buffered echo */ 

/* stop buffering; */ 

ob_end_clean(); 

あなたが望むようにコントローラ

関連する問題