嗨,我正在制作一个Yii2 Basic应用程序,并在管理区域中有一个文件上传表单. 文件上传将文件发送到app/web/uploads.我遵循了从samdark上传文件的精彩教程.可以在这里看到:https://github.com/yiisoft/yii2/blob/master/docs/guide/input-file-upload.md
我需要做的是创建一个视图,呈现上传文件夹中每个文件的超链接.
在Yii1.xx中有一个扩展来处理名为Cfile的文件非常方便.我在几个应用程序中使用我现在想做的事情.
使用Cfile我能够编写如下代码:
$ cfileDir = Yii :: app() - > file-> set('pdfs /'); //将pdfs设置为目标文件夹
$ files = $ cfileDir-> getContents();
getContents()方法很棒,因为它让我以后应用foreach循环并列出文件夹中的所有文件.
在Yii2中如何在uploads文件夹中执行类似的操作,即该文件夹中的文件列表并在视图中创建超链接.
为了创建视图内的超链接,我可以使用Html :: a(),但要获取其中的所有文件,我不知道该怎么做.
有任何想法吗 ??谢谢.
编辑
解决了ALI的精彩提示.
这是完整的代码块
<?php
$files=\yii\helpers\FileHelper::findFiles('uploads/');
if (isset($files[0])) {
foreach ($files as $index => $file) {
$nameFicheiro = substr($file, strrpos($file, '/') + 1);
echo Html::a($nameFicheiro, Url::base().'/uploads/'.$nameFicheiro) . "<br/>" . "<br/>" ; // render do ficheiro no browser
}
} else {
echo "There are no files available …Run Code Online (Sandbox Code Playgroud) 我开始在Yii2中迈出第一步.到目前为止,我能够编写一个应用程序并将数据库中的表连接到它,就像我在Yii1中学到的那样.
该表contacts和我的创建视图中的表单将数据发送到数据库没有任何问题.
问题是我只能使用内置在Yii2中的静态用户模型中的Admin/Admin或demo/demo登录.
在Yii1.xx中,我设法使用COMPONENTS/useridentity从数据库中的表中验证登录,就像这样(我使用了一个名为utilizador,带有字段的表id,utilizador和password):
class UserIdentity extends CUserIdentity
{
public function authenticate() {
$conexao=Yii::app()->db;
$consulta="select utilizador,password from utilizador ";
$consulta.="where utilizador='".$this->username."' and ";
$consulta.="password='".$this->password."'";
$resultado=$conexao->createCommand($consulta)->query();
$resultado->bindColumn(1,$this->username);
$resultado->bindColumn(2,$this->password);
while($resultado->read()!==false){
$this->errorCode=self::ERROR_NONE;
return !$this->errorCode;
}
}
}
Run Code Online (Sandbox Code Playgroud)
有了Yii2,我已经阅读了很多教程,包括Stack Overflow中的一个,但是没有一个能让我了解从MySQL数据库登录用户名和密码的过程.Yii2没有components/useridentity.php,我不知道从哪里开始,什么是正确的代码,使它能够覆盖开箱即用的静态用户模型.
我也尝试过扩展Yii2用户,阅读PDF指南,但不知道如何从我的控制器中的供应商文件夹中调用路由.做了几次尝试,但都失败了.
有人可以教我如何在Yii2中验证从数据库登录,优先不使用扩展吗?
编辑
我在Stack Overflow Yii Framework 2.0使用用户数据库登录时阅读了本教程
并且还从Yii2用户扩展中研究了PDF,但不知道如何处理以下部分和下一部分的pdf.它讲的是路线,但我不知道如何使用它们:
2.3.1显示用户Route/user/admin/index显示注册用户列表.您将能够看到许多有用的信息,例如注册时间和IP地址,确认和阻止状态等.
我也读过这个: http ://www.yiiframework.com/doc-2.0/yii-web-user.html 但我不认为它有解决问题的步骤.
编辑2
我尝试在Yii基本模板中实现User Model和LoginForm Model来验证用户登录.创建了一个数据库并与之相关联.数据库作为表用户和字段用户名,密码,authKey,acessToken填充值.从ActiveRecord扩展用户模型并实现\ yii\web\IdentityInterface,以使内置的Yii2功能完成其工作.还写了方法public static function tableName(){ return'user '; }
每次我尝试登录时,从LoginForm模型中的validatepassword()抛出 - >用户名或密码不正确.
这是我的代码:LoginForm Model: …
我需要从数组中删除一个元素并只返回剩余的元素。
我试着用splice和filter,但它不能去工作。
随着splice它只返回被删除的元素,我需要的是相反的。
var parse_obj = JSON.parse(document.getElementById('imagens').value);
function rImagem(data){
data = data - 1;
document.getElementsByClassName("btn_remover")[data].style.display = 'none';
parse_obj2 = parse_obj.splice(parse_obj.findIndex(e => e.data,1));
new_string = JSON.stringify(parse_obj2);
document.getElementById('imagens').value = new_string;
}
Run Code Online (Sandbox Code Playgroud) m 文件nraizes(a)从另一个 m 文件调用函数。
clear functions;
clc;
x = input('Insert value for a? ') ;
% call to nraizes()
w = nraizes(x)
clear functions;
Run Code Online (Sandbox Code Playgroud)
带有 nraizes() 函数的 nraizes.m 文件:
printf("\n\n");
printf("nraizes por André Castro - UAB 901396");
printf("\n");
printf("Usar na próxima prompt: nraizes(valor numérico)");
printf("\n");
function n = nraizes(a)
% limpar a memoria de todas as vars e funções
clear functions;
clc;
% intervalo para x
x = 0:.1:25;
% ambas as funções h(x) e g(x)
h = …Run Code Online (Sandbox Code Playgroud) 我正在使用 Yii2 扩展 - Jui DatePicker。
有没有办法在文本框中默认显示当前时间戳,这样用户每次填写表单字段时都不需要输入它?
我的观点,以及 Yii2 中的形式:
<?= $form->field($model, 'data')->widget(DatePicker::className(),
[
'language' => 'en',
'inline' => false,
'clientOptions' =>[
'dateFormat' => 'yyyy-MM-dd',
'showAnim'=>'fold',
'yearRange' => 'c-25:c+0',
'changeMonth'=> true,
'changeYear'=> true,
'autoSize'=>true,
'showOn'=> "button",
'buttonText' => 'clique aqui',
//'buttonImage'=> "images/calendar.gif",
]])
?>
Run Code Online (Sandbox Code Playgroud)
在 Yii1 中我曾经写过这样的代码(在小部件内部),并且默认出现时间戳:
'htmlOptions'=>array('size'=>12, 'value'=>CTimestamp::formatDate('d/m/Y')),
Run Code Online (Sandbox Code Playgroud)
Yii2中是否有等价物?
非常感谢...
我在Yii2中有一个名为eventos的视图文件夹.此视图是图库.
_view2.php用于向一般公众显示图像.它运作得很好.
但现在我想在_view2.php中创建一个globalsearch输入文本.
我已经有一个GridView小部件用于显示图像,但我不想使用$ searchmodel框,所以我禁用它们.
我想要的是在_view2.php文件中只使用一个输入字段呈现_search.php文件
我的问题是在_view2.php文件中渲染_search.php.
这是_view2.php的代码:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'showOnEmpty'=>false,
'summary'=>'',
'showFooter'=>false,
'showHeader' => false,
'bordered' => false,
'striped' => false,
'hover' => true,
//'options' => ['class' => 'grid-view'],
//'layout' => "{summary}\n{items}\n{pager}",
'columns' => [
['class' => 'yii\grid\SerialColumn'],
//'id',
//'nome',
'descricao',
'data',
// No model -> getImageurl()
[
'label' => '',
'format' => 'raw',
'value'=> function($data) { return Html::a(Html::img($data->imageurl, ['width'=>'300', 'height' => "170"]), $data->foto); },
],
[
'label' => '',
'format' => 'raw', …Run Code Online (Sandbox Code Playgroud) 我有这个 JavaScript 函数:
\nvar currentPlayer;\nfunction EvalSound(soundobj) {\n var thissound = document.getElementById(soundobj);\n if (currentPlayer && currentPlayer != thissound) {\n currentPlayer.pause(); \n }\n if (thissound.paused) {\n thissound.play();\n } else {\n thissound.pause();\n }\n thissound.currentTime = 0;\n currentPlayer = thissound;\n}\nRun Code Online (Sandbox Code Playgroud)\n这个 html5 音频播放器在 Yii2 的 Gridview 小部件内循环重复(它创建了许多播放器,每个播放器都有不同的歌曲):
\n'value'=> function ($data){ \n return "<audio controls>\n <source src='" . $data->ficheiro . "' type='audio/mp3' />\n </audio>";\n},\nRun Code Online (Sandbox Code Playgroud)\n问题是,当我正在播放一个音频标签并单击另一个音频标签的播放按钮时,它不会停止前一个正在播放的音频标签并开始新的音频标签。两个音频标签同时播放。我正在尝试调整 javascript 函数,但它不起作用。
\n我也尝试过声明var thisound = $('audio');
它也不起作用。
\n我需要在音频标签中添加 ID 吗?\n我需要将onClick='EvalSound'事件与音频标签关联吗? …
为什么这个for循环会给出错误:fzero:不是有效的初始包围
码:
a = input('Introduza o valor de a: ');
x = 0:.1:50;
h = @(x) cos(x);
g = @(x) exp(a*x)-1;
f = @(x) h(x) - g(x);
c = zeros(length(x))
for i=1:length(x)
c(i) = fzero(f,x(i));
end
plot(x, f(x));
hold on
plot(c,f(c),'-xr')
hold off
Run Code Online (Sandbox Code Playgroud)