SilverStripe 3.2升级UploadField不显示文件

时间:2015-12-10 17:59:51

标签: php silverstripe

我将SilverStripe网站从3.0更新为3.2。但是,升级后,某些页面类型上的private void button5_Click(object sender, EventArgs e) { string MyConnectionString = "Server=localhost; Database=markcreations; Uid=root; Pwd=admin"; MySqlConnection connection = new MySqlConnection(MyConnectionString); MySqlCommand cmd = new MySqlCommand(); cmd = connection.CreateCommand(); cmd.CommandText = "INSERT INTO `customer`(customername,businessname,mobilenumber) values('" + customerName.Text + "','" + businessName.Text + "','" + mobileNumber.Text + "')"; // Here is the Problem I want to extract Last_insert_id() and save it in variable. String @last_id = cmd.CommandText = ("select Last_insert_id()"); connection.Open(); cmd.ExecuteNonQuery(); connection.Close(); foreach (DataGridViewRow row in dataGridView1.Rows) { try { cmd = connection.CreateCommand(); cmd.Parameters.AddWithValue("@jobName", row.Cells["Job Name"].Value); cmd.Parameters.AddWithValue("@flexQuality", row.Cells["Flex Quality"].Value); cmd.Parameters.AddWithValue("@sizeLength", row.Cells["Size Length"].Value); cmd.Parameters.AddWithValue("@sizeWidth", row.Cells["Size Width"].Value); cmd.Parameters.AddWithValue("@rate", row.Cells["Rate"].Value); cmd.Parameters.AddWithValue("@quantity", row.Cells["Quantity"].Value); cmd.CommandText = "INSERT INTO `order`(customerId,jobName, flexQuality, sizeLength, sizeWidth, rate, quantity)VALUES( @last_id,@jobName, @flexQuality, @sizeLength, @sizeWidth, @rate, @quantity)"; connection.Open(); // and in the above line i want to insert that variable as values @last_id cmd.ExecuteNonQuery(); connection.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } MessageBox.Show("Records inserted."); } 不会显示相关文件。

Solution.php

UploadField

文件扩展名

public static $many_many = array (
    "LinkedDocuments" => "File"
);

public function getCMSFields() {

    $fields = parent::getCMSFields();

    if ($this->ID != 0) {
        $fields->addFieldToTab("Root.Documents", UploadField::create("LinkedDocuments")->setFolderName("assets/solutions/" . $this->URLSegment));
    }

    return $fields;
}

class SolutionFileExtenstion extends DataExtension { private static $belongs_many_many = array('Solutions' => 'Solution'); } 表似乎没问题。这些文件仍在前端工作。唯一的问题是Solution_LinkedDocuments为空,因此重新保存页面会删除链接文件。

2 个答案:

答案 0 :(得分:1)

除此之外,不能快速发现其他任何错误:

public static $many_many = array (
    "LinkedDocuments" => "File"
);

3.2包含重大更改,因为以前的版本没有遵循语义版本。

在3.1上,静态变量需要声明为私有静态才能正常工作

private static $many_many = array (
    "LinkedDocuments" => "File"
);

https://docs.silverstripe.org/en/3.1/changelogs/3.1.0/#upgrading#statics-in-custom-page-classes-need-to-be-private

来自文档:

" SiteTree和DataObject中定义的大多数静态都会受到影响,例如:$ db,$ has_one,$ has_many,$ many_many,$ defaults,$ allowed_children。对于ContentController中定义的静态也是如此,例如$ allowed_actions"

还要查看更改日志,直到3.1.9和https://docs.silverstripe.org/en/3.2/upgrading/

这至少是你遇到的一个问题。此外,您可能正在使用许多已弃用的功能,因此您需要注意它们。就个人而言,我还没有在3.2上运行任何东西,并且在UploadField使用情况上看不到任何直接错误,但我目前无法对此进行测试。

无论如何,你应该看到因错误的函数而出现的PHP错误,尤其是私有变量和公共变量的变化。

显然你还没有,所以我建议你将开发服务器中的站点设置为开发模式,并将PHP错误级别设置为E_ALL和display_errors on。

或者直接查看服务器上的PHP错误日志。

答案 1 :(得分:0)

Problme原来是一个腐败的数据库表。不知道为什么链接仍然在前端工作,但我写了一个任务,根据文件名重新链接文件,从DB的升级前版本复制并修复它。