我有这样简单的PHP代码:
<?php
namespace app\controllers;
use Yii;
use yii\web\Controller;
use app\models\bvh\BvhFiles;
use app\models\bvh\BvhCategories;
class BvhController extends Controller {
public function actionView($id) {
// $cache = $cache = Yii::$app->getCache();
$BvhFile = BvhFiles::getDb()->cache(function ($db) {
return BvhFiles::find()->where(['OR', 'id=' . $id, 'YoutubeId=' . $id])->one();
});
但它不起作用。它失败了
PHP注意 - yii \ base \ ErrorException
未定义的变量:id
在
return BvhFiles::find()->where(['OR', 'id=' . $id, 'YoutubeId=' . $id])->one();
我应该如何将$ id变量传递给此代码?
谢谢!
答案 0 :(得分:2)
你应该试试这个:
$BvhFile = BvhFiles::getDb()->cache(function ($db) use ($id) {
return BvhFiles::find()->where(['OR', 'id=' . $id, 'YoutubeId=' . $id])->one();
});
详细了解anonymous function and how to use variables from the parent scope。
你应该使用它(read more):
return BvhFiles::find()->where(['OR', ['id' => $id], ['YoutubeId' => $id]])->one();
答案 1 :(得分:1)
这是一个与Yii无关的问题,而是与php本身有关。如果要将变量传递给匿名函数,则需要使用use
关键字:
$BvhFile = BvhFiles::getDb()->cache(function ($db) use($id) {
return BvhFiles::find()->where(['OR', 'id=' . $id, 'YoutubeId=' . $id])->one();
});