也许我一共做错了。但我正在Laravel做我的第一个MVC。这是我的设置。
该应用程序将从varoius源下载数据并保存到数据库以进行输出。
我有两个控制器。一个将数据保存到数据库,另一个从instagram下载数据。在Instagram控制器中。我目前只输出数据。我想用我的保存控制器来保存它。
Instagram控制器:
class InstagramController extends BaseController {
public function read($q)
{
$client_id = 'ea7bee895ef34ed08eacad639f515897';
$uri = 'https://api.instagram.com/v1/tags/'.$q.'/media/recent?client_id='.$client_id;
$response = $this->sendRequest($uri);
print_r(json_decode($response));
//return json_decode($response);
}
public function sendRequest($uri){
$curl = curl_init($uri);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
$responses = curl_exec($curl);
$responses = json_decode($responses);
curl_close($curl);
echo '<pre>';
foreach ($responses->data as $data) {
//0/{postid}/{url}/{author}/{content}
$type = 0;
$postid = $data->id;
$url = $data->link;
$author = $data->user->username;
$content = $data->images->standard_resolution->url;
echo $type.' '.$postid.' '.$url.' '.$author.' '.$content.'<br />';
}
//var_dump($responses->data);
echo '</pre>';
//return $response;
}
}
保存控制器:
class PostController extends BaseController {
public function save($type, $postid, $url, $author, $content)
{
$post = new Post;
$post->type = $type;
$post->postid = $postid;
$post->url = $url;
$post->author = $author;
$post->content = $content;
try
{
$post->save();
echo $post;
}catch(Exception $e){
throw new Exception( 'Already saved', 0, $e);
}
//
}
}
答案 0 :(得分:1)
控制器映射到操作(一个路由执行一个操作)。您可以通过呼叫他的路线来呼叫控制器。
因为获取图像并保存它们是相同操作的一部分(即:相同的路径),我建议您将该代码移动到库或帮助程序(或者为什么不是模型,因为您正在检索和保存数据)
无论如何,我不明白你在控制器中这样做的原因。控制器通常在模型和视图之间执行操作。从Web服务获取数据更多地属于模型而不属于控制器。实际上,我真的建议您将该代码移动到库以便以后重用。您的控制器必须只负责调用库的读取方法来读取图像,然后使用模型在本地保存它。