0

Symfony2 を使用しています。私のコントローラーは、によって作成されたカテゴリなどのいくつかの値を見つけて、それらをテンプレートに渡します。問題は、ユーザーがまだカテゴリを作成していない場合、メッセージを表示してカテゴリを作成するように勧めたいことです。

コードは次のとおりです。

    if($number_of_categories == 0){
        $newcommer = true;

        //Here the template doesn't need any variables, because it only displays
        // "Please first add some categories"
    } else {
        $newcommer = false;

        //Here the variables, which I give to the template 
        //are filled with meaningfull values
    }

return $this->render('AcmeBudgetTrackerBundle:Home:index.html.twig', array(
        'newcommer' => $newcommer,
        'expenses' => $expenses_for_current_month,
        'first_category' => $first_category,
        'sum_for_current_month' => $sum_for_current_month,
        'budget_for_current_month' => $budget_for_current_month
));

問題は、ユーザーがカテゴリを持っていない場合、変数を埋めるものがないため、次のように記述しなければならないことです。

        //What I want to avoid is this: 
        $expenses_for_current_month = null;
        $first_category = null;
        $sum_for_current_month = null;
        $budget_for_current_month = null;

ただ避けるためにNotice: Undefined variable ...

これを達成するためのよりクリーンなソリューションはありますか? テンプレートに与えられた変数の数を動的に生成する方法はありませんか? 前もって感謝します!

4

1 に答える 1

1

ここに簡単な解決策があります(私があなたの問題を理解していれば):

$template = 'AcmeBudgetTrackerBundle:Home:index.html.twig';

if ($number_of_categories == 0){

    //Here the template doesn't need any variables, because it only displays
    // "Please first add some categories"

    return $this->render($template, array(
        'newcommer' => true,
    ));

} else {

    //Here the variables, which I give to the template 
    //are filled with meaningfull values

    return $this->render($template, array(
        'newcommer' => false,
        'expenses' => $expenses_for_current_month,
        'first_category' => $first_category,
        'sum_for_current_month' => $sum_for_current_month,
        'budget_for_current_month' => $budget_for_current_month
    ));
}

テンプレートを管理するためのよりクリーンなソリューションが必要な場合は、注釈@Template()を使用できます (ビューに渡す配列を返すだけです)。

// ...

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

class MyController extends Controller
{
    /**
     * @Route("/my_route.html")
     * @Template("AcmeBudgetTrackerBundle:Home:index.html.twig")
     */
    public function indexAction()
    {
            // ...

        if ($number_of_categories == 0){

            return array(
                'newcommer' => true,
            );

        } else {

            //Here the variables, which I give to the template 
            //are filled with meaningfull values

            return array(
                'newcommer' => false,
                'expenses' => $expenses_for_current_month,
                'first_category' => $first_category,
                'sum_for_current_month' => $sum_for_current_month,
                'budget_for_current_month' => $budget_for_current_month
            );
        }
    }
}
于 2013-05-31T12:28:59.707 に答える