我正在使用Yii2开发一个Web应用程序。
我将一个数组从我的控制器传递到我的视图以显示为表格。数组中的每个元素都是一个表示表行的子数组。然而,每个元素表示表格单元的子阵列可以由字符串和“子子阵列”组成。在字符串的情况下,字符串将仅在表格单元格中输出。在子子阵列的情况下,我想“展开”数组以进行显示。同样,这些子子阵列可以由字符串或“子子子阵列”构成。等等。
接近这个的最佳方法是什么?我在想我应该编写一个递归函数来展开视图中的数组。如果是字符串,则输出,否则如果是数组,则展开数组。
编写函数本身对我来说似乎很简单,但我在哪里实际定义它?它是否属于我的控制器类?别的地方?我想我会从我的角度来称呼它。在Yii结构中,如何调用它以使其在范围内(如果我使用正确的术语)并被正确调用?
所以在我的控制器中,我会有类似的东西:
return $this->render('//messages', [
'table' => $array_to_unwind
]);
在我的messages.php视图文件中,我会有类似下面的内容,其中unwind()函数输出一个字符串(如果它是一个字符串),或者解开一个数组(如果它是一个数组):
<table>
<?php
foreach ($table as $row) {
echo '<tr>';
foreach ($row as $cell) {
echo '<td>';
unwind($cell);
echo '</td>';
}
echo '</tr>';
}
?>
</table>
答案 0 :(得分:3)
您应该创建自己的Helper
(例如在path-to-project/components/
- 基本模板中)类来执行此类操作,并在内部创建静态函数。
<?php
namespace app\components;
class MyHelper
{
public static function unwind($param) {
// here body of your function
}
}
然后在视图中调用它:
foreach ($row as $cell) {
echo '<td>';
echo \app\components\MyHelper::unwind($cell); //or without echo if your function is doing it, but it will be better if function will return value instead of echoing it
echo '</td>';
}
答案 1 :(得分:1)
您可以通过使用Yii组件来实现此目的。
组件通常放在path/to/your/project/components
目录中。定义自己的组件并在组件类中放置 static 函数。
示例:
namespace app\components;
Class MyComponent extends Component {
public static function unwind(){
// your code here..
return $array;
}
}
然后在你看来:
use app\components\Mycomponent;
....
....
echo MyComponent::unwind();
答案 2 :(得分:-1)
if i have get your question right, and if you are looking for recursive function than this can be helpful.
// add foreach in html
foreach ($table as $row) {
if (is_array($row)) {
unwind($row);
}else{
<html you want to print if its string>
}
}
//create a function in same view file
function unwind($data)
{
foreach ($data as $key => $value){
<html you want to print if its an array>
}
}