0

也许我做错了。但我正在 Laravel 中做我的第一个 MVC。这是我的设置。

该应用程序将从各种来源下载数据并保存到数据库以供输出。

我有两个控制器。一种将数据保存到数据库,另一种从 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);
    }
   // 
}
}
4

1 回答 1

1

控制器被映射到动作(一个路由执行一个动作)。你可以通过调用他的路由来调用控制器。

因为获取图像并保存它们是同一操作的一部分(即:相同的路线),我建议您将该代码移动到库或帮助程序(或者为什么不是模型,因为您正在检索和保存数据)

无论如何,我不明白你在控制器中这样做的原因。控制器通常在模型和视图之间执行操作。从 web 服务获取数据更多地属于模型而不是控制器。事实上,我真的建议您将该代码移到库中以便以后重用。您的控制器必须只负责调用库的 read 方法来读取图像,然后使用模型将其保存在本地。

于 2013-08-14T12:09:34.547 回答