好的,我已经设法结束了这一次。
控制器:
$addProperty=Property::addProperty($title,$description,$location,
$agent,$owner,$lat,$long,$position,$photoHolder,
$stars,$negatives,$adverts,$dropLink,$photosSite);
型号:
public static function addProperty($title,$description,$location,$agent,
$owner,$lat,$long,$position,
$photoHolder,$stars,$negatives,
$adverts,$dropLink,$photosSite)
问题是,不仅我有太多的参数,而且还需要传递10多个参数。
有什么建议吗?
答案 0 :(得分:2)
有很多方法可以做到这一点。使用模型时,我首选的方法是为每个属性设置一个set方法。这样你就不需要一次性传递所有内容(当应用程序发展并添加/删除内容时非常有用)。
所以在一个模型中,我通常会有这样的东西:
class Property {
private $title;
private $description;
private $location;
/**
* Creates an instance of property via a static method.
*
*/
public static factory()
{
return new Property();
}
public function setTitle($title)
{
$this->title = $title;
return $this;
}
public function setDescription($description)
{
$this->description = $description;
return $this;
}
public function setLocation($location)
{
$this->location = $location;
return $this;
}
// because the attributes in this instance are private I would also need getters
public function getTitle()
{
return $title;
}
public function getDescription()
{
return $description;
}
public function getLocation()
{
return $location;
}
}
然后,您还可以添加save()
方法或其他任何您想要它的方法。
好的,所以我添加了一个名为factory
的新静态方法,它允许您创建实例而无需将其分配给变量。除此之外,我已将return $this;
添加到所有不返回属性的方法中。
这实际上意味着您现在可以这样做:
// create a new property
Property::factory()
->setTitle($title)
->setDescription($description)
->setLocation($location)
->save(); // if you had that function
这样做的好处是,如果你确实需要休息一下,那么以下内容也会有效。
// create a new property
$property = Property::factory()
->setTitle($title)
->setDescription($description); // this is returning the property instance `return $this`
// do some processing to get the $location value
// continue creating the new property
$property
->setLocation($location)
->save(); // if you had that function
答案 1 :(得分:2)
更好的方法是将参数作为数组传递:
$params=array(
'title'=>'title',
'other_parameter'=>'value',
);
$addProperty=Property::addProperty($params);