请问 http://www.yiichina.com/assets/
这个404 Forbidden怎么做到的
这个是服务器禁止访问目录,不是404页面吧。
http://www.yiichina.com/doc/guide/2.0/runtime-handling-errors 这种方式应该可以吧
这应该是404公共错误页面的配置问题,可以自定义404页面,然后配置服务器
这个是404页面
这不是 web server 之类的 自动抛出吗。
请问 http://www.yiichina.com/assets/
这个404 Forbidden怎么做到的
这个是服务器禁止访问目录,不是404页面吧。
http://www.yiichina.com/doc/guide/2.0/runtime-handling-errors 这种方式应该可以吧
这应该是404公共错误页面的配置问题,可以自定义404页面,然后配置服务器
这个是404页面
这不是 web server 之类的 自动抛出吗。
我的视图:
/view/ext/_form.php
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
/* @var $this yii\web\View */
/* @var $model app\models\Ext */
/* @var $form yii\widgets\ActiveForm */
?>
<div class="ext-form">
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>
<?= $form->field($model, 'image1')->fileInput() ?>
<?= $form->field($model, 'image2')->fileInput(['maxlength' => true]) ?>
<?= $form->field($model, 'info')->textInput(['maxlength' => true]) ?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? '创建' : '更新', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
这是model
models/ext.php
<?php
namespace app\models;
use Yii;
use yii\web\UploadedFile;
/**
* This is the model class for table "ext".
*
* @property integer $id
* @property string $image1
* @property string $image2
* @property string $info
*/
class Ext extends \yii\db\ActiveRecord
{
/**
* @inheritdoc
*/
public static function tableName()
{
return 'ext';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['image1', 'image2'], 'string', 'max' => 60],
[['image1', 'image2'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg'],
[['info'], 'string', 'max' => 255],
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'image1' => 'logo图片',
'image2' => '微信二维码图片',
'info' => '站点简介',
];
}
/**
* @return \yii\db\ActiveQuery
*/
public function upload()
{
if ($this->validate())
{
$randName=date("Y").date("m").date("d").date("H").date("i").date("s").rand(100, 999).'-'.md5(microtime()); //生成随机文件名
$uploadPath= 'uploads/' . $randName . '.' . $this->image1->extension; //设置保存路径, 为 backend\web\uploads
$this->image1->saveAs($uploadPath); //保存文件
return Url::to('app/web/'.$uploadPath,true); //返回文件的 url 路径,使用 Url 帮助类。
}
else
{
return false;
}
}
}
控制器:
controllers/Extcontroller.php
<?php
namespace app\controllers;
use Yii;
use app\models\Ext;
use app\models\ExtSearch;
use yii\web\Controller;
use yii\web\UploadedFile;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
class ExtController extends Controller
{
/**
* @inheritdoc
*/
public function behaviors()
{
return [
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'delete' => ['POST'],
],
],
];
}
/**
* Lists all Ext models.
* @return mixed
*/
public function actionIndex()
{
$searchModel = new ExtSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
/**
* Displays a single Ext model.
* @param integer $id
* @return mixed
*/
public function actionView($id)
{
......
}
/**
public function actionCreate()
{
$model = new Ext();
//$model->wb_logo = UploadedFile::getInstance($model, 'image1');
if ($model->load(Yii::$app->request->post()) ) {
//var_dump(Yii::$app->request->post());die;
$model->save();
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('create', [
'model' => $model,
]);
}
}
public function actionUpdate($id)
{
$model = $this->findModel($id);
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
} else {
return $this->render('update', [
'model' => $model,
]);
}
}
protected function findModel($id)
{
if (($model = Ext::findOne($id)) !== null) {
return $model;
} else {
throw new NotFoundHttpException('The requested page does not exist.');
}
}
public function actionUpload()
{
$model = new Ext();
if (Yii::$app->request->isPost) {
$model->image1 = UploadedFile::getInstance($model, 'image1');
if ($model->upload()) {
// 文件上传成功
return;
}
}
return $this->render('upload', ['model' => $model]);
}
}
现在就是一直成功不了
[[‘image1’, ‘image2’], ‘string’, ‘max’ => 60],
[[‘image1’, ‘image2’], ‘string’, ‘max’ => 60],
你自己都说出来答案了。在新闻表的加个字段。读一次新闻该字段自增1
@zhuxinghui 问题乱码了,重新编辑下
每次访问页面都在数据库字段加1 吧,我是新手
加个visit_count
yii2高级版公共变量在哪里设置?
方式挺多的,看你习惯吧,你可以在params.php或者params-local.php配置文件中,注意当然如果在这配置文件中配置,就得注意它的加载顺序,yii2按以下的顺序读取配置:
1、common/config/params.php
2、common/config/params-local.php
3、frontend/config/params.php
4、frontend/config/params-local.php
所以,如果你的公共变量前后台都公用,那你可以配置到common/config/params.php或common/config/params-local.php,如果是前台用的到那配置到frontend/config/params.php或frontend/config/params-local.php,后台用的到那配置到backend/config/params.php或backend/config/params-local.php中。
读取则是: echo Yii::$app->params[‘adminEmail’]; 表示读取配置文件中配置的adminEmail这个变量,按照上面的顺序读取,后面的配置文件会覆盖掉前面的配置文件定义的值。如果所有配置都读取不到,返回null。
还有,我个人的习惯是自己定义个常量类,然后定义静态的属性,使用的时候通过 “类::$属性” 来读取。
怎么用还是很灵活的,没有特别的要求。就看你的使用习惯
[
'attribute'=>'img',
'format' => ['raw',],
'value' => function($model){
return Html::img($model->img);
}
],
我想要让它变小一点,就修改成了
[
'attribute'=>'img',
'format' =>[
'image',
[
'height' =>50,
'width' => 100
]
],
'value' => function($model) {
return Html::img($model->img);
}
],
可是图片不显示了,怎么回事?
参数不正确
“微博图片”和“微信二维码”要做成选择图片上传的那种怎么实现啊?
图片上传,一般数据库直接存放图片的地址。yii2中,可以利用一些封装好的组件对图片进行处理。参考:http://t.cn/RVOUrZm
在加载kartik\detail\DetailView
时,开启ckeditor后,出现下面异常:
Invalid Parameter – yii\base\InvalidParamException
Trying to copy a directory to itself or a subdirectory.
看了下,问题可能出在下面的第2条:
BaseFileHelper::copyDirectory('/Users/qijiaona/var/www/intel/backend/web/assets', '/Users/qijiaona/var/www/intel/backend/web/assets/da31e3d5');
关闭ckeditor插件后就可以正常运行了。
求解决。
1. in /Users/qijiaona/var/www/intel/vendor/yiisoft/yii2/helpers/BaseFileHelper.php at line 260
2. in /Users/qijiaona/var/www/intel/vendor/yiisoft/yii2/web/AssetManager.php at line 542 – yii\helpers\BaseFileHelper::copyDirectory('/Users/qijiaona/var/www/intel/ba...', '/Users/qijiaona/var/www/intel/ba...', ['dirMode' => 509, 'fileMode' => null, 'beforeCopy' => Closure])
3. in /Users/qijiaona/var/www/intel/vendor/yiisoft/yii2/web/AssetManager.php at line 458 – yii\web\AssetManager::publishDirectory('/Users/qijiaona/var/www/intel/ba...', [])
4. in /Users/qijiaona/var/www/intel/vendor/yiisoft/yii2/web/AssetBundle.php at line 183 – yii\web\AssetManager::publish('assets', [])
5. in /Users/qijiaona/var/www/intel/vendor/yiisoft/yii2/web/AssetManager.php at line 266 – yii\web\AssetBundle::publish(yii\web\AssetManager)
6. in /Users/qijiaona/var/www/intel/vendor/yiisoft/yii2/web/AssetManager.php at line 237 – yii\web\AssetManager::loadBundle('dosamigos\ckeditor\CKEditorWidge...', [], true)
7. in /Users/qijiaona/var/www/intel/vendor/yiisoft/yii2/web/View.php at line 284 – yii\web\AssetManager::getBundle('dosamigos\ckeditor\CKEditorWidge...')
8. in /Users/qijiaona/var/www/intel/vendor/yiisoft/yii2/web/AssetBundle.php at line 123 – yii\web\View::registerAssetBundle('dosamigos\ckeditor\CKEditorWidge...')
9. in /Users/qijiaona/var/www/intel/vendor/2amigos/yii2-ckeditor-widget/src/CKEditor.php at line 57 – yii\web\AssetBundle::register(yii\web\View)
10. in /Users/qijiaona/var/www/intel/vendor/2amigos/yii2-ckeditor-widget/src/CKEditor.php at line 44 – dosamigos\ckeditor\CKEditor::registerPlugin()
11. in /Users/qijiaona/var/www/intel/vendor/yiisoft/yii2/base/Widget.php at line 102 – dosamigos\ckeditor\CKEditor::run()
12. in /Users/qijiaona/var/www/intel/vendor/yiisoft/yii2/widgets/ActiveField.php at line 703 – yii\base\Widget::widget(['preset' => 'full', 'clientOptions' => ['allowedContent' => true, 'extraPlugins' => 'lineheight,uploadimage', 'line_height' => '1;1.2;1.5;2;2.5;3', 'imageUploadUrl' => '/accelerator/upload'], 'model' => common\models\Accelerator, 'attribute' => 'acc_desc_long', ...])
13. in /Users/qijiaona/var/www/intel/vendor/kartik-v/yii2-detail-view/DetailView.php at line 873 – yii\widgets\ActiveField::widget('\dosamigos\ckeditor\CKEditor', ['preset' => 'full', 'clientOptions' => ['allowedContent' => true, 'extraPlugins' => 'lineheight,uploadimage', 'line_height' => '1;1.2;1.5;2;2.5;3', 'imageUploadUrl' => '/accelerator/upload']])
14. in /Users/qijiaona/var/www/intel/vendor/kartik-v/yii2-detail-view/DetailView.php at line 785 – kartik\detail\DetailView::renderFormAttribute(['attribute' => 'acc_desc_long', 'format' => 'raw', 'type' => 'widget', 'widgetOptions' => ['class' => '\dosamigos\ckeditor\CKEditor', 'preset' => 'full', 'clientOptions' => ['allowedContent' => true, 'extraPlugins' => 'lineheight,uploadimage', 'line_height' => '1;1.2;1.5;2;2.5;3', 'imageUploadUrl' => '/accelerator/upload']], ...])
15. in /Users/qijiaona/var/www/intel/vendor/kartik-v/yii2-detail-view/DetailView.php at line 745 – kartik\detail\DetailView::renderAttributeItem(['attribute' => 'acc_desc_long', 'format' => 'raw', 'type' => 'widget', 'widgetOptions' => ['class' => '\dosamigos\ckeditor\CKEditor', 'preset' => 'full', 'clientOptions' => ['allowedContent' => true, 'extraPlugins' => 'lineheight,uploadimage', 'line_height' => '1;1.2;1.5;2;2.5;3', 'imageUploadUrl' => '/accelerator/upload']], ...])
16. in /Users/qijiaona/var/www/intel/vendor/kartik-v/yii2-detail-view/DetailView.php at line 718 – kartik\detail\DetailView::renderAttributeRow(['attribute' => 'acc_desc_long', 'format' => 'raw', 'type' => 'widget', 'widgetOptions' => ['class' => '\dosamigos\ckeditor\CKEditor', 'preset' => 'full', 'clientOptions' => ['allowedContent' => true, 'extraPlugins' => 'lineheight,uploadimage', 'line_height' => '1;1.2;1.5;2;2.5;3', 'imageUploadUrl' => '/accelerator/upload']], ...])
17. in /Users/qijiaona/var/www/intel/vendor/kartik-v/yii2-detail-view/DetailView.php at line 611 – kartik\detail\DetailView::renderDetailView()
18. in /Users/qijiaona/var/www/intel/vendor/kartik-v/yii2-detail-view/DetailView.php at line 548 – kartik\detail\DetailView::runWidget()
19. in /Users/qijiaona/var/www/intel/vendor/yiisoft/yii2/base/Widget.php at line 102 – kartik\detail\DetailView::run()
20. in /Users/qijiaona/var/www/intel/backend/views/accelerator/view.php at line 176 – yii\base\Widget::widget(['model' => common\models\Accelerator, 'mode' => 'view', 'formOptions' => ['options' => ['enctype' => 'multipart/form-data']], 'panel' => ['heading' => '众创空间详情', 'type' => 'primary'], ...])
21. in /Users/qijiaona/var/www/intel/vendor/yiisoft/yii2/base/View.php at line 326 – require('/Users/qijiaona/var/www/intel/ba...')
22. in /Users/qijiaona/var/www/intel/vendor/yiisoft/yii2/base/View.php at line 248 – yii\base\View::renderPhpFile('/Users/qijiaona/var/www/intel/ba...', ['model' => common\models\Accelerator, 'dataProvider' => yii\data\ActiveDataProvider, 'dpMentor' => yii\data\ActiveDataProvider, 'dpInvestor' => yii\data\ActiveDataProvider, ...])
23. in /Users/qijiaona/var/www/intel/vendor/yiisoft/yii2/base/View.php at line 150 – yii\base\View::renderFile('/Users/qijiaona/var/www/intel/ba...', ['model' => common\models\Accelerator, 'dataProvider' => yii\data\ActiveDataProvider, 'dpMentor' => yii\data\ActiveDataProvider, 'dpInvestor' => yii\data\ActiveDataProvider, ...], backend\controllers\AcceleratorController)
24. in /Users/qijiaona/var/www/intel/vendor/yiisoft/yii2/base/Controller.php at line 378 – yii\base\View::render('view', ['model' => common\models\Accelerator, 'dataProvider' => yii\data\ActiveDataProvider, 'dpMentor' => yii\data\ActiveDataProvider, 'dpInvestor' => yii\data\ActiveDataProvider, ...], backend\controllers\AcceleratorController)
25. in /Users/qijiaona/var/www/intel/backend/controllers/AcceleratorController.php at line 189 – yii\base\Controller::render('view', ['model' => common\models\Accelerator, 'dataProvider' => yii\data\ActiveDataProvider, 'dpMentor' => yii\data\ActiveDataProvider, 'dpInvestor' => yii\data\ActiveDataProvider, ...])
26. backend\controllers\AcceleratorController::actionView('58')
27. in /Users/qijiaona/var/www/intel/vendor/yiisoft/yii2/base/InlineAction.php at line 55 – call_user_func_array([backend\controllers\AcceleratorController, 'actionView'], ['58'])
28. in /Users/qijiaona/var/www/intel/vendor/yiisoft/yii2/base/Controller.php at line 154 – yii\base\InlineAction::runWithParams(['r' => 'accelerator/view', 'id' => '58'])
29. in /Users/qijiaona/var/www/intel/vendor/yiisoft/yii2/base/Module.php at line 454 – yii\base\Controller::runAction('view', ['r' => 'accelerator/view', 'id' => '58'])
30. in /Users/qijiaona/var/www/intel/vendor/yiisoft/yii2/web/Application.php at line 100 – yii\base\Module::runAction('accelerator/view', ['r' => 'accelerator/view', 'id' => '58'])
31. in /Users/qijiaona/var/www/intel/vendor/yiisoft/yii2/base/Application.php at line 375 – yii\web\Application::handleRequest(yii\web\Request)
32. in /Users/qijiaona/var/www/intel/backend/web/index.php at line 18 – yii\base\Application::run()
ps: 我看到之前有人也遇到过类似的问题,比如sgmengfault上的这个yii2 Trying to copy a directory to itself or a subdirectory,还有yiichina上的这个创建表单报错 ,但这两个帖子都与我遇到的情况不同,求解决。
我的AppAsset类配置
public $basePath = '@webroot';
public $baseUrl = '@web';
public $css = [
'css/site.css',
];
public $js = [
];
public $depends = [
'yii\web\YiiAsset',
'yii\bootstrap\BootstrapAsset',
];
应该改成这样:
修改yii2-ckeditor-widget文件夹下面的CKEditorWidgetAsset.php文件
修改
为
数据是一个大量的数组,我需要拼接 SQL 一起添加到数据库
INSERT INTO `erm_course` ('course_name','course_type_id','course_time') VALUES ('1','1','5'), ('1','1','7'), ('1','1','7'), ('1','1','7'), ('1','1','7');
要执行这条 SQL 语句
看到别人写了段生成.csv的代码中有这么一句 $filename = fopen(‘php://output’, ‘w’);fputcsv($file, array(‘All’,’–‘,’–‘,111)); 不明白php://output是什么意思?
php://output 是一个只写的数据流, 允许你以 print 和 echo 一样的方式 写入到输出缓冲区。官网手册
fopen的第一个参数应该是要打开的文件名或者url
$str = "Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36"
怎么能匹配到这中间的Nexus 6
呀,
以Android开头,以Build结尾?
啊。怎么匹配呀,正则这儿实在是太弱了。
不一定要写正则啊,截取字符串也可以
如果是安卓客户端的请求,这个信息头基本上都是这些格式,
Dalvik/1.6.0 (Linux; U; Android 4.3; vivo X3L Build/JLS36C)
Mozilla/5.0 (Linux; U; Android 2.3.6; zh-cn; GT-S7500 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML
, like Gecko) Version/4.0 Mobile Safari/533.1
Mozilla/5.0 (Linux; Android
5.1.1; vivo X7 Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36
个人认为Build才是查找的关键,可以这么做
没关注过这个信息头,单从这一个字串来说,没法确定。
至少得知道可能会有哪几种情况会出现才能有答案。
你是要检查一个字符串里是否有Nexus 6吗?